/connections/browse → /tables/preview → /schemas → /tables), you can create an External Table directly with a single SQL statement:
POST /sql/ddl and is equivalent to running the full preview → schema → table REST flow — the controller infers the Pinot schema from the source table and pre-validates it against the catalog before creating the table.
Option reference
Recognized option names are case-insensitive. Unrecognized options pass through verbatim — with their original case preserved — into the generated table’s task config, so you can set advancedExternalTableSyncTask keys (see Best Practices & Configs) directly in the WITH clause. Type those keys in their exact camelCase spelling (e.g. 'storeNestedSchema.enabled' = 'true'): the task config lookup is case-sensitive, and pass-through keys are also read at CREATE-time schema inference.
Any option not listed above is passed through unchanged to the External Table task config — for example
executor = 'controller' to explicitly select the watcher-based sync path used by the observability endpoints.Example: Unity Catalog with OAuth2
Limitations
- The generated schema and table config aren’t visible for review before creation, unlike the REST flow’s
/tables/previewstep — use the REST flow instead when you need to inspect or tweak the inferred schema first. - As with the REST flow, the table is created immediately but data only appears once the controller’s watcher completes the first sync — see Observability to track progress.

