What is an External Table? A Pinot table whose data stays in Parquet files in your object store (an Iceberg catalog such as AWS Glue, Amazon S3 Tables, Unity Catalog, Apache Polaris, Snowflake Open Catalog / Horizon, or Nessie, or a raw S3/GCS data lake) instead of being copied into Pinot’s own segment format. Pinot reads the remote data at query time, with server-side caching to keep queries fast.Which sources are supported? S3 Data Lake (raw Parquet), GCS Data Lake (raw Parquet via S3 interop), AWS Glue (Iceberg REST), AWS S3 Tables (Iceberg REST), Unity Catalog (Iceberg REST, including Delta Lake tables with UniForm enabled), Apache Polaris and Snowflake Open Catalog (Iceberg REST, OAuth2 principal credentials), Snowflake Horizon Catalog (Iceberg REST, PAT), and Nessie (Iceberg REST, via the generic rest service type with a branch/ref prefix).Does StarTree support Delta Lake? Yes, indirectly: a Delta Lake table with UniForm enabled publishes Iceberg-compatible metadata alongside its Delta log, so registering it in a Unity Catalog makes it queryable as an External Table through the same Iceberg REST path used for Glue and S3 Tables. There is no direct Delta-log reader — UniForm is required. Enabling UniForm means setting 'delta.enableIcebergCompatV3' = 'true' (Databricks Runtime 18 LTS or later; 'delta.enableIcebergCompatV2' = 'true' on older runtimes) and 'delta.universalFormat.enabledFormats' = 'iceberg' on the Delta table, plus column mapping ('delta.columnMapping.mode' = 'id' recommended for new tables; existing tables can only be upgraded to 'name') — see the Databricks UniForm requirements for the full prerequisites. Three operational caveats: Databricks generates the Iceberg metadata asynchronously after each Delta commit, so freshly written data reaches StarTree only after that conversion plus the next sync; materialized views and streaming tables can only be exposed through the pipeline-managed Compatibility V3 path (Databricks Runtime 17.3 or later, plus delta.enableRowTracking and pipelines.externalMetadata.enabled); and under Compatibility V3 deletes may be written as deletion vectors rather than by rewriting data files — StarTree applies Iceberg v3 Puffin position deletes at query time, but that path is a preview feature you have to ask StarTree to enable (V2 tables keep copy-on-write deletes, which need no such setup). See Unity Catalog: Onboarding via API.Can I query Parquet on S3 or GCS without a catalog at all? Yes — the S3 Data Lake and GCS Data Lake sources scan a raw bucket prefix directly, with no Iceberg table, Glue database, or catalog service of any kind. See S3: Onboarding via API or GCS: Onboarding via API.How is it different from a regular Pinot table? A regular table ingests and stores a local copy of the data as Pinot segments. An External Table leaves the data in place and reads it remotely — so there’s no data duplication and onboarding is fast, at the cost of relying on the object store plus cache for read performance.When should I use one — and when not? Use it when you already have data in S3/Iceberg and want to query it without copying or re-ingesting — large or infrequently queried datasets, or data shared with other engines. Prefer a regular table for the lowest, most predictable query latency, or when you need an unsupported capability such as a sorted index.Does Pinot copy the Parquet into Pinot, or read it from S3 directly? It reads directly from the Parquet files in S3 — the data is never duplicated into Pinot’s segment format. Servers cache the bytes they read (data, index, and footer caches) so repeat queries are fast. See Data and Index Caching.
How do I onboard one? Two ways: the Data Portal UI or the REST APIs. The Data Portal wizard covers AWS Glue, Amazon S3 Tables, Unity Catalog, Apache Polaris & Snowflake Open Catalog, Snowflake Horizon, S3 Data Lake, and GCS Data Lake. The API guides cover those plus Apache Polaris & Snowflake Open Catalog, Snowflake Horizon, and Nessie — Nessie is the only API-only source, with no Data Portal wizard yet.Do I have to trigger the first sync? No. After the table is created, the controller’s External Table watcher runs the first sync automatically and then re-syncs on the table’s schedule. You can trigger a run manually to start sooner — see Observability.How often does it sync? Can I change the schedule? It syncs on the schedule (Quartz cron) in the table’s ExternalTableSyncTask config. The Data Portal applies a default of every 5 minutes; via the API you set schedule yourself. Match it to your source’s commit cadence — polling faster than the source changes just adds overhead.Can I pause and resume syncing? Yes. In the Data Portal, open the table and select Pause Sync — this removes the sync schedule (stashing it so it can be restored) rather than touching the table’s data or checkpoint. In-progress runs finish normally and data is preserved; select Resume Sync to pick up where it left off.Connection validation failed — what do I check? Almost always a permission or region mismatch. Confirm the credentials can read both the catalog and the underlying S3 data, and that the region matches. For AWS Glue, the warehouse must be the numeric AWS account ID. Test Connection now checks storage credentials up front for every catalog type, and — for S3 Data Lake and S3 Tables specifically — the bucket region too; see Onboarding fails with a region error.Can multiple tables share the same credentials? Yes — reuse the same catalog connection parameters across as many External Tables as you like.Do I put s3:// in the bucket field? No. The bucket field takes the bucket name only — not an s3://... URL — and the prefix should not have a trailing slash. Make sure the AWS region is set; a missing region is a common cause of onboarding errors. See Troubleshooting.How do I grant access to the source bucket? Three options: an assumed IAM role (set roleArn, plus externalId if required), the cluster’s node IAM role, or static AWS access keys. The role/keys need s3:GetObject and s3:ListBucket on the source bucket and prefix. Verify access from the cluster with aws s3 ls s3://<bucket>/<prefix>/ before onboarding.Can I onboard many tables at once? Onboard each table through the Data Portal or the REST APIs (AWS Glue / Amazon S3 Tables / Unity Catalog). There is no single bulk table-creation API today; script the per-table API flow to automate it.
How are source types mapped to Pinot types? See Data Type Mapping for the Parquet (raw S3) and Iceberg type tables. Complex types (struct, map, list) become JSON or multi-value columns.Can I edit the inferred schema or change a column’s data type? Avoid changing the data types that the preview/onboarding step infers. Forcing a different type (for example, switching a binary/string column to INT) breaks segment generation. Adjusting names, the time column, or null handling is fine.How do I add an inverted index (or another dictionary-backed index)? Keep the column’s forward index RAW and add an explicit dictionary block alongside the index — dictionary-backed indexes (inverted, FST, IFST) need it on External Tables:
Can I rename columns on an External Table? As of 0.16.0, conditionally yes: for catalogType=iceberg-rest sources with full Iceberg snapshot metadata access, enable schemaEvolution.enabled=true on the table (see Schema Evolution). A rename in the source is tracked as an alias against the existing Pinot column rather than creating a new column, so the Pinot column name is preserved. This only resolves top-level field renames (not nested-field renames). Raw S3/GCS Parquet sources have no Iceberg field-id history to key off, so renames there still require a manual schema change; confirm with StarTree support whether your specific catalog adapter (Glue, S3 Tables, Unity, generic REST) has the metadata access this needs.Why do JSON path queries on a struct column return NULL on my Unity Catalog / Delta UniForm table? The table was likely created with Delta column mapping (delta.columnMapping.mode = name or id), which stores every Parquet column under an opaque physical col-<uuid> name. Top-level column names are always resolved back to your logical names, but names inside complex columns (struct, array<struct>, map<_,struct>) are only resolved when storeNestedSchema.enabled is on (the default) for the table’s ExternalTableSyncTask config — if it was set to false, the nested keys are stored under their physical names and JSON_EXTRACT_SCALAR(col, '$.yourField', ...) returns NULL. See Unity Catalog — Schema options for column mapping.How is the time column chosen? Automatically, from the first suitable timestamp/date column, preserving the source granularity. See the time column section.Why are my timestamps off by ~1000×? On current releases, plain Iceberg timestamp / timestamptz columns are inferred as microseconds (matching Iceberg’s storage), timestamp_ns as nanoseconds, and timestamp(p) from its precision. Tables onboarded on older 0.16.0 builds were inferred as milliseconds regardless of the stored unit — that mismatch produces the ~1000× error. Fix it by setting the time column’s granularity explicitly to match the data. See Data Type Mapping.Why did I get a “Requires RAW encoding” error? External Tables require every column to use RAW (no-dictionary) encoding. A column was configured or defaulted to dictionary encoding. The preview/onboarding flow sets RAW automatically.
Which indexes are supported? Most of them — including inverted, range, timestamp, JSON, text, sparse, star-tree, bloom, FST, IFST, and vector (HNSW, with storeInSegmentFile: true). Only sorted and geospatial/H3 are not supported. See Supported Indexes.Why isn’t the sorted index supported? A sorted index is the column’s forward data physically stored in sorted order. External Tables read the Parquet files in place and don’t own that layout, so the data can’t be reordered.Can I add an index after creating the table? Yes — update the table config to add a supported index, the same as any Pinot table. The index is built over the existing remote data.
Where is the data cached? On each server: a Parquet data cache, an index cache, and a Parquet footer cache. See Data and Index Caching.The first query on a column is slow, then it’s fast. Why? The first read populates the cache from object storage; later reads hit the cache. Enable pre-warm / preload to populate caches at segment load instead of on first query.How do I make queries faster? Add supported indexes for your filters, enable the page cache and preload for the table, and pre-warm at segment load. See Best Practices and Configs for the relevant knobs.How do I clear a cache? Use the server page cache endpoint — see Data and Index Caching.
What happens when the source data changes or files are deleted? Each scheduled sync advances to the latest Iceberg snapshot (or, for raw S3/GCS, scans for new files) and ingests what’s new; the watermark is visible as checkpointValue in the status endpoint. Append-only sources are fully handled. How deletes and compaction are handled depends on the source type — see the next two questions.My source compacts or rewrites files — which source type should I use? (Iceberg REST catalog.) Use an Iceberg REST catalog (catalogType=iceberg-rest — AWS Glue, S3 Tables, Unity Catalog, Apache Polaris / Snowflake, or Nessie), not the raw S3/GCS Data Lake source. A raw Data Lake source pins each ingested segment to a physical Parquet file path; when the source compacts — rewriting small files into larger ones and deleting the originals — those paths break and the server can no longer load or serve the affected segments (you’ll see java.io.FileNotFoundException in server logs). A REST catalog instead tracks the table’s live file set through snapshot metadata, so each sync reconciles to the current post-compaction files. Raw S3/GCS is the right fit only for append-only sources whose files are never rewritten. See Segments fail to load after upstream compaction.Does continueOnFileError protect against files deleted or compacted after ingestion? No. continueOnFileError=true only lets a sync run skip a file it can’t read while it is generating segments — it has no effect once a segment is already in the table. If that segment’s backing file later disappears (e.g. compacted away upstream), the server fails to load or serve it regardless of this setting; the fix is to use an Iceberg REST catalog for compacting sources (above).What’s the difference between continueOnError and continueOnFileError? They are two separate configs, set in different places, and easy to confuse. continueOnError is an OSS ingestionConfig field that skips individual bad rows while reading a file or stream. continueOnFileError is an ExternalTableSyncTask field that skips an entire unreadable file so one bad file doesn’t fail the whole run. Both apply only during ingestion/sync — neither repairs an already-ingested segment.
How do I check whether my last sync succeeded? Call the status endpoint and read fileOnboardingRun.status (COMPLETED / RUNNING / FAILED / IDLE). On failure, failurePhase and errorMessage say where and why. See Observability.Does status: COMPLETED mean my data is current? No. Run status only means the last sync run finished — the source may have committed more data since. To judge freshness, call …/externalTable/status?includeLag=true and read syncState, lag.percentDataIngested, and lag.snapshotsBehind. See Ingestion lag.How far behind the source is my data? With ?includeLag=true, subtract lag.synced.committedAt from lag.upstream.committedAt for a time delta, or read lag.snapshotsBehind / lag.percentDataIngested. There is deliberately no single “lag in seconds” field.My sync shows COMPLETED but the table is empty or stale — why? A snapshot whose segment generation keeps failing is retried up to maxRetries (default 3) runs, then abandoned; a later run with no newer snapshot then reports COMPLETED with segmentsUploaded: 0, and fileOnboardingRun — which only ever describes the run happening now — hides the earlier failures. Compare filesDiscovered vs segmentsUploaded, check syncState, and check snapshotIngestion.consecutiveFailedRuns / lastRunError for the hidden failure streak. See Sync says COMPLETED but no data lands.Can I monitor sync from dashboards instead of polling the API? The controller emits per-phase sync timers (EXTERNAL_TABLE_SYNC_*_TIME_MS) for latency dashboards, but there is no lag or per-run success/failure metric — alert on freshness and failures through the status API. See Metrics and alerting.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"StarTree Docs","colors":{"primary":"#145C84","light":"#21C6DC","dark":"#002654"},"logo":{"light":"https://mintcdn.com/startree/ydxOgkfeGyqN5wki/logo/light.png?fit=max\u0026auto=format\u0026n=ydxOgkfeGyqN5wki\u0026q=85\u0026s=41cae4dd8179ebb4a14c5dff27a33d15","dark":"https://mintcdn.com/startree/ydxOgkfeGyqN5wki/logo/dark.png?fit=max\u0026auto=format\u0026n=ydxOgkfeGyqN5wki\u0026q=85\u0026s=d83ac60286959cbed0541c5275c99084"},"favicon":"https://mintcdn.com/startree/xe5mTwlEdZc68KYh/favicon.png?fit=max\u0026auto=format\u0026n=xe5mTwlEdZc68KYh\u0026q=85\u0026s=7590ab58796eeae05ed2563b11a5c6e1","navbar":{"links":[{"href":"https://startree.ai/","label":"Go to StarTree.ai"}],"primary":{"type":"button","label":"Talk to us","href":"https://startree.ai/demo"}},"footer":{"socials":{"slack":"https://inviter.co/startree-community","x":"https://twitter.com/startreedata","youtube":"https://www.youtube.com/startreedata","github":"https://github.com/startreedata","linkedin":"https://www.linkedin.com/company/startreedata"},"links":[{"header":"Resources","items":[{"label":"Community","href":"https://inviter.co/startree-community"},{"label":"Blogs","href":"https://startree.ai/resources/category/blog"},{"label":"Videos","href":"https://www.youtube.com/startreedata"}]},{"items":[{"label":"Trademarks","href":"https://startree.ai/startree-trademark-policy"},{"label":"Privacy","href":"https://startree.ai/privacy-policy"},{"label":"Terms of Use","href":"https://startree.ai/terms-conditions"}]}]},"integrations":{"ga4":{"measurementId":"G-J9X0VNWR5B"},"gtm":{"tagId":"GTM-KFDQTC4"}},"contextual":{"options":["copy","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"startree","hasAudioNarration":false,"actualSubdomain":"startree","customDomains":["docs.startree.ai"],"gitSource":{"type":"github","owner":"startreedata","repo":"startree-cloud-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec6066dd9d9f5b04d76e31","collectionId":"85daccc7-8e34-44d1-af6d-4e158eb5442f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec6066dd9d9f5b04d76e31"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aec6066dd9d9f5b04d76e31","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Reference","count":272},{"language":"default","tag":"StarTree Cloud","count":219},{"language":"default","tag":"Pinot Controller APIs","count":212},{"language":"default","tag":"ThirdEye","count":142},{"language":"default","tag":"Templates","count":71},{"language":"default","tag":"StarTree Templates","count":71},{"language":"default","tag":"Recipes","count":60},{"language":"default","tag":"Apache Pinot Recipes","count":55},{"language":"default","tag":"Table","count":51},{"language":"default","tag":"Ingestion","count":47}]},"assistantConfig":{},"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":"rbac-expansion","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":"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":"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":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwkT9nA2.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwAT9nA2.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwgT9nA2.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwcT9nA2.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwsT9nA2.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwoT9nA2.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwQT9g.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvvYwYL8g.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvmYwYL8g.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvuYwYL8g.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvhYwYL8g.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvtYwYL8g.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvsYwYL8g.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcviYwY.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w0aXpsog.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w9aXpsog.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w2aXpsog.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w3aXpsog.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w5aXo.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiAyp8kv8JHgFVrJJLmE0tDMPKzSQ.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiAyp8kv8JHgFVrJJLmE0tMMPKzSQ.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiAyp8kv8JHgFVrJJLmE0tCMPI.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmv1pVFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmv1pVGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmv1pVF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm21lVFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm21lVGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm21lVF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrJJLucXtAKPY.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrJJLufntAKPY.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrJJLucHtA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmg1hVFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmg1hVGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmg1hVF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmr19VFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmr19VGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmr19VF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmy15VFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmy15VGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmy15VF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm111VFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm111VGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm111VF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm81xVFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm81xVGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm81xVF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrLPTucXtAKPY.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrLPTufntAKPY.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrLPTucHtA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLFj_Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLFj_Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLFj_Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDz8Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDz8Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDz8Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiEyp8kv8JHgFVrJJbecmNE.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiEyp8kv8JHgFVrJJnecmNE.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiEyp8kv8JHgFVrJJfecg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLGT9Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLGT9Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLGT9Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLEj6Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLCz7Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLCz7Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLCz7Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDD4Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDD4Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDD4Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLBT5Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLBT5Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLBT5Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 300 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh0NSDulI.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 300 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh2dSDulI.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 300 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh0dSDulI.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 300 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh3tSDulI.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 300 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bhZ_Wmh2uX.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 300 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh09SDulI.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Fira Code';\n font-style: normal;\n font-weight: 300 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/firacode/v27/uU9NCBsR6Z2vfE9aq3bh3dSD.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwkT9nA2.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwAT9nA2.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwgT9nA2.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwcT9nA2.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwsT9nA2.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwoT9nA2.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCm3FwrK3iLTcvnUwQT9g.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvvYwYL8g.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvmYwYL8g.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvuYwYL8g.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvhYwYL8g.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvtYwYL8g.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcvsYwYL8g.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcCo3FwrK3iLTcviYwY.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w0aXpsog.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w9aXpsog.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w2aXpsog.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w3aXpsog.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/montserrat/v31/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu173w5aXo.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiAyp8kv8JHgFVrJJLmE0tDMPKzSQ.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiAyp8kv8JHgFVrJJLmE0tMMPKzSQ.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiAyp8kv8JHgFVrJJLmE0tCMPI.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmv1pVFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmv1pVGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmv1pVF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm21lVFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm21lVGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm21lVF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrJJLucXtAKPY.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrJJLufntAKPY.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrJJLucHtA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmg1hVFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmg1hVGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmg1hVF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmr19VFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmr19VGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmr19VF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmy15VFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmy15VGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLmy15VF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm111VFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm111VGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm111VF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm81xVFteOcEg.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm81xVGdeOcEg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: italic;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiDyp8kv8JHgFVrJJLm81xVF9eO.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrLPTucXtAKPY.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrLPTufntAKPY.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 100;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiGyp8kv8JHgFVrLPTucHtA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLFj_Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLFj_Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 200;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLFj_Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDz8Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDz8Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDz8Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiEyp8kv8JHgFVrJJbecmNE.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiEyp8kv8JHgFVrJJnecmNE.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiEyp8kv8JHgFVrJJfecg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLGT9Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLGT9Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLGT9Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLEj6Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLCz7Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLCz7Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLCz7Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDD4Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDD4Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLDD4Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLBT5Z11lFc-K.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLBT5Z1JlFc-K.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiByp8kv8JHgFVrLBT5Z1xlFQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n.font-inter h4{font-family:'Inter'}.font-fira-code{font-family:'Fira Code'}.card-icon a .fill-gray-800,.card-icon-dark a .fill-gray-800{height:48px;width:48px}.card-icon a div h2,.card-icon-dark a div h2{color:#002654;font-size:1.25rem;font-weight:500;line-height:130%;letter-spacing:0%;font-family:'Inter'}.card-icon a div .top-5,.card-icon-dark a div .top-5{display:none}.card-icon-dark .card{background-color:#0C2E5C}.card-icon a,.card-icon-dark a{height:100%;width:100%;margin-top:0px;margin-bottom:0px}.gap-cards{gap:1rem}"}],"page":{"pagePath":"corecapabilities/external-table/faq","slug":"/corecapabilities/external-table/faq","pageMetadata":{"title":"FAQ","sidebarTitle":"FAQ","icon":"circle-question","description":"Answers to common questions about StarTree External Tables — supported sources, onboarding, schema, indexes, performance, and operations.","href":"/corecapabilities/external-table/faq"},"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: \"Answers to common questions about StarTree External Tables — supported sources, onboarding, schema, indexes, performance, and operations.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsx(_components.p,{children:`This feature requires StarTree release 0.15.0 or later, and must be enabled on demand — contact StarTree support to activate it.`})}),`\n`,_jsx(Heading,{level:`2`,id:`general`,children:`General`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`What is an External Table?`}),` A Pinot table whose data stays in Parquet files in your object store (an Iceberg catalog such as AWS Glue, Amazon S3 Tables, Unity Catalog, Apache Polaris, Snowflake Open Catalog / Horizon, or Nessie, or a raw S3/GCS data lake) instead of being copied into Pinot’s own segment format. Pinot reads the remote data at query time, with server-side caching to keep queries fast.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Which sources are supported?`}),` S3 Data Lake (raw Parquet), GCS Data Lake (raw Parquet via S3 interop), AWS Glue (Iceberg REST), AWS S3 Tables (Iceberg REST), Unity Catalog (Iceberg REST, including Delta Lake tables with UniForm enabled), Apache Polaris and Snowflake Open Catalog (Iceberg REST, OAuth2 principal credentials), Snowflake Horizon Catalog (Iceberg REST, PAT), and Nessie (Iceberg REST, via the generic `,_jsx(_components.code,{children:`rest`}),` service type with a branch/ref `,_jsx(_components.code,{children:`prefix`}),`).`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Does StarTree support Delta Lake?`}),` Yes, indirectly: a Delta Lake table with `,_jsx(_components.a,{href:`https://docs.delta.io/latest/delta-uniform.html`,children:`UniForm`}),` enabled publishes Iceberg-compatible metadata alongside its Delta log, so registering it in a `,_jsx(_components.strong,{children:`Unity Catalog`}),` makes it queryable as an External Table through the same Iceberg REST path used for Glue and S3 Tables. There is no direct Delta-log reader — UniForm is required. Enabling UniForm means setting `,_jsx(_components.code,{children:`'delta.enableIcebergCompatV3' = 'true'`}),` (Databricks Runtime 18 LTS or later; `,_jsx(_components.code,{children:`'delta.enableIcebergCompatV2' = 'true'`}),` on older runtimes) and `,_jsx(_components.code,{children:`'delta.universalFormat.enabledFormats' = 'iceberg'`}),` on the Delta table, plus column mapping (`,_jsx(_components.code,{children:`'delta.columnMapping.mode' = 'id'`}),` recommended for new tables; existing tables can only be upgraded to `,_jsx(_components.code,{children:`'name'`}),`) — see the `,_jsx(_components.a,{href:`https://docs.databricks.com/aws/en/delta/uniform#requirements`,children:`Databricks UniForm requirements`}),` for the full prerequisites. Three operational caveats: Databricks generates the Iceberg metadata `,_jsx(_components.strong,{children:`asynchronously`}),` after each Delta commit, so freshly written data reaches StarTree only after that conversion plus the next sync; `,_jsx(_components.strong,{children:`materialized views and streaming tables`}),` can only be exposed through the pipeline-managed Compatibility V3 path (Databricks Runtime 17.3 or later, plus `,_jsx(_components.code,{children:`delta.enableRowTracking`}),` and `,_jsx(_components.code,{children:`pipelines.externalMetadata.enabled`}),`); and under Compatibility V3 `,_jsx(_components.strong,{children:`deletes may be written as deletion vectors`}),` rather than by rewriting data files — StarTree applies Iceberg v3 Puffin position deletes at query time, but that path is a `,_jsx(_components.a,{href:`/corecapabilities/external-table/deletion-vectors`,children:`preview feature`}),` you have to ask StarTree to enable (V2 tables keep copy-on-write deletes, which need no such setup). See `,_jsx(_components.a,{href:`/corecapabilities/external-table/unity/onboarding-api`,children:`Unity Catalog: Onboarding via API`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can I query Parquet on S3 or GCS without a catalog at all?`}),` Yes — the `,_jsx(_components.strong,{children:`S3 Data Lake`}),` and `,_jsx(_components.strong,{children:`GCS Data Lake`}),` sources scan a raw bucket prefix directly, with no Iceberg table, Glue database, or catalog service of any kind. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/s3/onboarding-api`,children:`S3: Onboarding via API`}),` or `,_jsx(_components.a,{href:`/corecapabilities/external-table/gcs/onboarding-api`,children:`GCS: Onboarding via API`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How is it different from a regular Pinot table?`}),` A regular table ingests and stores a local copy of the data as Pinot segments. An External Table leaves the data in place and reads it remotely — so there’s no data duplication and onboarding is fast, at the cost of relying on the object store plus cache for read performance.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When should I use one — and when not?`}),` Use it when you already have data in S3/Iceberg and want to query it without copying or re-ingesting — large or infrequently queried datasets, or data shared with other engines. Prefer a regular table for the lowest, most predictable query latency, or when you need an unsupported capability such as a sorted index.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Does Pinot copy the Parquet into Pinot, or read it from S3 directly?`}),` It reads directly from the Parquet files in S3 — the data is never duplicated into Pinot’s segment format. Servers cache the bytes they read (data, index, and footer caches) so repeat queries are fast. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/data-and-index-caching`,children:`Data and Index Caching`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`onboarding-\u0026-sync`,children:`Onboarding \u0026 sync`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How do I onboard one?`}),` Two ways: the Data Portal UI or the REST APIs. The Data Portal wizard covers `,_jsx(_components.a,{href:`/corecapabilities/external-table/glue/onboarding-data-portal`,children:`AWS Glue`}),`, `,_jsx(_components.a,{href:`/corecapabilities/external-table/s3tables/onboarding-data-portal`,children:`Amazon S3 Tables`}),`, `,_jsx(_components.a,{href:`/corecapabilities/external-table/unity/onboarding-data-portal`,children:`Unity Catalog`}),`, `,_jsx(_components.a,{href:`/corecapabilities/external-table/polaris/onboarding-data-portal`,children:`Apache Polaris \u0026 Snowflake Open Catalog`}),`, `,_jsx(_components.a,{href:`/corecapabilities/external-table/horizon/onboarding-data-portal`,children:`Snowflake Horizon`}),`, `,_jsx(_components.a,{href:`/corecapabilities/external-table/s3/onboarding-data-portal`,children:`S3 Data Lake`}),`, and `,_jsx(_components.a,{href:`/corecapabilities/external-table/gcs/onboarding-data-portal`,children:`GCS Data Lake`}),`. The API guides cover those plus `,_jsx(_components.a,{href:`/corecapabilities/external-table/polaris/onboarding-api`,children:`Apache Polaris \u0026 Snowflake Open Catalog`}),`, `,_jsx(_components.a,{href:`/corecapabilities/external-table/horizon/onboarding-api`,children:`Snowflake Horizon`}),`, and `,_jsx(_components.a,{href:`/corecapabilities/external-table/nessie/onboarding-api`,children:`Nessie`}),` — Nessie is the only API-only source, with no Data Portal wizard yet.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Do I have to trigger the first sync?`}),` No. After the table is created, the controller’s External Table watcher runs the first sync automatically and then re-syncs on the table’s schedule. You can trigger a run manually to start sooner — see `,_jsx(_components.a,{href:`/corecapabilities/external-table/observability`,children:`Observability`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How often does it sync? Can I change the schedule?`}),` It syncs on the `,_jsx(_components.code,{children:`schedule`}),` (Quartz cron) in the table’s `,_jsx(_components.code,{children:`ExternalTableSyncTask`}),` config. The Data Portal applies a default of every 5 minutes; via the API you set `,_jsx(_components.code,{children:`schedule`}),` yourself. Match it to your source’s commit cadence — polling faster than the source changes just adds overhead.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can I pause and resume syncing?`}),` Yes. In the Data Portal, open the table and select `,_jsx(_components.strong,{children:`Pause Sync`}),` — this removes the sync schedule (stashing it so it can be restored) rather than touching the table’s data or checkpoint. In-progress runs finish normally and data is preserved; select `,_jsx(_components.strong,{children:`Resume Sync`}),` to pick up where it left off.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Connection validation failed — what do I check?`}),` Almost always a permission or region mismatch. Confirm the credentials can read both the catalog and the underlying S3 data, and that the region matches. For AWS Glue, the warehouse must be the numeric AWS account ID. Test Connection now checks storage credentials up front for every catalog type, and — for S3 Data Lake and S3 Tables specifically — the bucket region too; see `,_jsx(_components.a,{href:`/corecapabilities/external-table/troubleshooting#onboarding-fails-with-a-region-error`,children:`Onboarding fails with a region error`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can multiple tables share the same credentials?`}),` Yes — reuse the same catalog connection parameters across as many External Tables as you like.`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Do I put `,_jsx(_components.code,{children:`s3://`}),` in the bucket field?`]}),` No. The bucket field takes the bucket name only — not an `,_jsx(_components.code,{children:`s3://...`}),` URL — and the prefix should not have a trailing slash. Make sure the AWS region is set; a missing region is a common cause of onboarding errors. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/troubleshooting#onboarding`,children:`Troubleshooting`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How do I grant access to the source bucket?`}),` Three options: an `,_jsx(_components.strong,{children:`assumed IAM role`}),` (set `,_jsx(_components.code,{children:`roleArn`}),`, plus `,_jsx(_components.code,{children:`externalId`}),` if required), the cluster’s `,_jsx(_components.strong,{children:`node IAM role`}),`, or static `,_jsx(_components.strong,{children:`AWS access keys`}),`. The role/keys need `,_jsx(_components.code,{children:`s3:GetObject`}),` and `,_jsx(_components.code,{children:`s3:ListBucket`}),` on the source bucket and prefix. Verify access from the cluster with `,_jsx(_components.code,{children:`aws s3 ls s3://\u003cbucket>/\u003cprefix>/`}),` before onboarding.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can I onboard many tables at once?`}),` Onboard each table through the Data Portal or the REST APIs (`,_jsx(_components.a,{href:`/corecapabilities/external-table/glue/onboarding-api`,children:`AWS Glue`}),` / `,_jsx(_components.a,{href:`/corecapabilities/external-table/s3tables/onboarding-api`,children:`Amazon S3 Tables`}),` / `,_jsx(_components.a,{href:`/corecapabilities/external-table/unity/onboarding-api`,children:`Unity Catalog`}),`). There is no single bulk table-creation API today; script the per-table API flow to automate it.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`schema-\u0026-data-types`,children:`Schema \u0026 data types`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How are source types mapped to Pinot types?`}),` See `,_jsx(_components.a,{href:`/corecapabilities/external-table/data-type-mapping`,children:`Data Type Mapping`}),` for the Parquet (raw S3) and Iceberg type tables. Complex types (struct, map, list) become JSON or multi-value columns.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can I edit the inferred schema or change a column’s data type?`}),` Avoid changing the data types that the preview/onboarding step infers. Forcing a different type (for example, switching a binary/string column to `,_jsx(_components.code,{children:`INT`}),`) breaks segment generation. Adjusting names, the time column, or null handling is fine.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How do I add an inverted index (or another dictionary-backed index)?`}),` Keep the column’s forward index `,_jsx(_components.code,{children:`RAW`}),` and add an explicit `,_jsx(_components.code,{children:`dictionary`}),` block alongside the index — dictionary-backed indexes (inverted, FST, IFST) need it on External Tables:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"indexes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"forward\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"encodingType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"RAW\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"dictionary\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {},`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"inverted\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"disabled\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can I rename columns on an External Table?`}),` As of 0.16.0, conditionally yes: for `,_jsx(_components.code,{children:`catalogType=iceberg-rest`}),` sources with full Iceberg snapshot metadata access, enable `,_jsx(_components.code,{children:`schemaEvolution.enabled=true`}),` on the table (see `,_jsx(_components.a,{href:`/corecapabilities/external-table/schema-evolution`,children:`Schema Evolution`}),`). A rename in the source is tracked as an alias against the existing Pinot column rather than creating a new column, so the Pinot column name is preserved. This only resolves `,_jsx(_components.strong,{children:`top-level`}),` field renames (not nested-field renames). Raw S3/GCS Parquet sources have no Iceberg field-id history to key off, so renames there still require a manual schema change; confirm with StarTree support whether your specific catalog adapter (Glue, S3 Tables, Unity, generic REST) has the metadata access this needs.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Why do JSON path queries on a struct column return NULL on my Unity Catalog / Delta UniForm table?`}),` The table was likely created with Delta column mapping (`,_jsx(_components.code,{children:`delta.columnMapping.mode`}),` = `,_jsx(_components.code,{children:`name`}),` or `,_jsx(_components.code,{children:`id`}),`), which stores every Parquet column under an opaque physical `,_jsx(_components.code,{children:`col-\u003cuuid>`}),` name. Top-level column names are always resolved back to your logical names, but names `,_jsx(_components.strong,{children:`inside`}),` complex columns (`,_jsx(_components.code,{children:`struct`}),`, `,_jsx(_components.code,{children:`array\u003cstruct>`}),`, `,_jsx(_components.code,{children:`map\u003c_,struct>`}),`) are only resolved when `,_jsx(_components.code,{children:`storeNestedSchema.enabled`}),` is on (the default) for the table’s `,_jsx(_components.code,{children:`ExternalTableSyncTask`}),` config — if it was set to `,_jsx(_components.code,{children:`false`}),`, the nested keys are stored under their physical names and `,_jsx(_components.code,{children:`JSON_EXTRACT_SCALAR(col, '$.yourField', ...)`}),` returns `,_jsx(_components.code,{children:`NULL`}),`. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/unity/onboarding-api#schema-options-for-column-mapping`,children:`Unity Catalog — Schema options for column mapping`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How is the time column chosen?`}),` Automatically, from the first suitable timestamp/date column, preserving the source granularity. See the `,_jsx(_components.a,{href:`/corecapabilities/external-table/data-type-mapping#time-column`,children:`time column section`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Why are my timestamps off by ~1000×?`}),` On current releases, plain Iceberg `,_jsx(_components.code,{children:`timestamp`}),` / `,_jsx(_components.code,{children:`timestamptz`}),` columns are inferred as `,_jsx(_components.strong,{children:`microseconds`}),` (matching Iceberg’s storage), `,_jsx(_components.code,{children:`timestamp_ns`}),` as nanoseconds, and `,_jsx(_components.code,{children:`timestamp(p)`}),` from its precision. Tables onboarded on older 0.16.0 builds were inferred as milliseconds regardless of the stored unit — that mismatch produces the ~1000× error. Fix it by setting the time column’s granularity explicitly to match the data. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/data-type-mapping#granularity`,children:`Data Type Mapping`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Why did I get a “Requires RAW encoding” error?`}),` External Tables require every column to use RAW (no-dictionary) encoding. A column was configured or defaulted to dictionary encoding. The preview/onboarding flow sets RAW automatically.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`indexes`,children:`Indexes`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Which indexes are supported?`}),` Most of them — including inverted, range, timestamp, JSON, text, sparse, star-tree, bloom, FST, IFST, and vector (HNSW, with `,_jsx(_components.code,{children:`storeInSegmentFile: true`}),`). Only `,_jsx(_components.strong,{children:`sorted`}),` and `,_jsx(_components.strong,{children:`geospatial/H3`}),` are not supported. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/indexes`,children:`Supported Indexes`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Why isn’t the sorted index supported?`}),` A sorted index is the column’s forward data physically stored in sorted order. External Tables read the Parquet files in place and don’t own that layout, so the data can’t be reordered.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can I add an index after creating the table?`}),` Yes — update the table config to add a supported index, the same as any Pinot table. The index is built over the existing remote data.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`performance-\u0026-caching`,children:`Performance \u0026 caching`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Where is the data cached?`}),` On each server: a Parquet data cache, an index cache, and a Parquet footer cache. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/data-and-index-caching`,children:`Data and Index Caching`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The first query on a column is slow, then it’s fast. Why?`}),` The first read populates the cache from object storage; later reads hit the cache. Enable pre-warm / preload to populate caches at segment load instead of on first query.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How do I make queries faster?`}),` Add supported indexes for your filters, enable the page cache and preload for the table, and pre-warm at segment load. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/best-practices-and-configs`,children:`Best Practices and Configs`}),` for the relevant knobs.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How do I clear a cache?`}),` Use the server page cache endpoint — see `,_jsx(_components.a,{href:`/corecapabilities/external-table/data-and-index-caching#clearing-caches`,children:`Data and Index Caching`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`operations`,children:`Operations`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`What happens when the source data changes or files are deleted?`}),` Each scheduled sync advances to the latest Iceberg snapshot (or, for raw S3/GCS, scans for new files) and ingests what’s new; the watermark is visible as `,_jsx(_components.code,{children:`checkpointValue`}),` in the `,_jsx(_components.a,{href:`/corecapabilities/external-table/observability#run-status`,children:`status endpoint`}),`. `,_jsx(_components.strong,{children:`Append-only sources are fully handled.`}),` How deletes and compaction are handled depends on the source type — see the next two questions.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`My source compacts or rewrites files — which source type should I use? (Iceberg REST catalog.)`}),` Use an `,_jsx(_components.strong,{children:`Iceberg REST catalog`}),` (`,_jsx(_components.code,{children:`catalogType=iceberg-rest`}),` — AWS Glue, S3 Tables, Unity Catalog, Apache Polaris / Snowflake, or Nessie), not the raw S3/GCS Data Lake source. A raw Data Lake source pins each ingested segment to a `,_jsx(_components.strong,{children:`physical Parquet file path`}),`; when the source compacts — rewriting small files into larger ones and deleting the originals — those paths break and the server can no longer load or serve the affected segments (you’ll see `,_jsx(_components.code,{children:`java.io.FileNotFoundException`}),` in server logs). A REST catalog instead tracks the table’s live file set through `,_jsx(_components.strong,{children:`snapshot metadata`}),`, so each sync reconciles to the current post-compaction files. Raw S3/GCS is the right fit only for `,_jsx(_components.strong,{children:`append-only`}),` sources whose files are never rewritten. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/troubleshooting#segments-fail-to-load-or-serve-after-upstream-compaction`,children:`Segments fail to load after upstream compaction`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Does `,_jsx(_components.code,{children:`continueOnFileError`}),` protect against files deleted or compacted after ingestion?`]}),` No. `,_jsx(_components.code,{children:`continueOnFileError=true`}),` only lets a `,_jsx(_components.strong,{children:`sync run`}),` skip a file it can’t read `,_jsx(_components.em,{children:`while it is generating segments`}),` — it has no effect once a segment is already in the table. If that segment’s backing file later disappears (e.g. compacted away upstream), the server fails to load or serve it regardless of this setting; the fix is to use an Iceberg REST catalog for compacting sources (above).`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`What’s the difference between `,_jsx(_components.code,{children:`continueOnError`}),` and `,_jsx(_components.code,{children:`continueOnFileError`}),`?`]}),` They are two separate configs, set in different places, and easy to confuse. `,_jsx(_components.code,{children:`continueOnError`}),` is an OSS `,_jsx(_components.code,{children:`ingestionConfig`}),` field that skips `,_jsx(_components.strong,{children:`individual bad rows`}),` while reading a file or stream. `,_jsx(_components.code,{children:`continueOnFileError`}),` is an `,_jsx(_components.code,{children:`ExternalTableSyncTask`}),` field that skips an `,_jsx(_components.strong,{children:`entire unreadable file`}),` so one bad file doesn’t fail the whole run. Both apply only during ingestion/sync — neither repairs an already-ingested segment.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`monitoring-\u0026-observability`,children:`Monitoring \u0026 observability`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How do I check whether my last sync succeeded?`}),` Call the `,_jsx(_components.a,{href:`/corecapabilities/external-table/observability#run-status`,children:`status endpoint`}),` and read `,_jsx(_components.code,{children:`fileOnboardingRun.status`}),` (`,_jsx(_components.code,{children:`COMPLETED`}),` / `,_jsx(_components.code,{children:`RUNNING`}),` / `,_jsx(_components.code,{children:`FAILED`}),` / `,_jsx(_components.code,{children:`IDLE`}),`). On failure, `,_jsx(_components.code,{children:`failurePhase`}),` and `,_jsx(_components.code,{children:`errorMessage`}),` say where and why. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/observability`,children:`Observability`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Does `,_jsx(_components.code,{children:`status: COMPLETED`}),` mean my data is current?`]}),` No. Run status only means the last sync run `,_jsx(_components.em,{children:`finished`}),` — the source may have committed more data since. To judge freshness, call `,_jsx(_components.code,{children:`…/externalTable/status?includeLag=true`}),` and read `,_jsx(_components.code,{children:`syncState`}),`, `,_jsx(_components.code,{children:`lag.percentDataIngested`}),`, and `,_jsx(_components.code,{children:`lag.snapshotsBehind`}),`. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/observability#ingestion-lag`,children:`Ingestion lag`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How far behind the source is my data?`}),` With `,_jsx(_components.code,{children:`?includeLag=true`}),`, subtract `,_jsx(_components.code,{children:`lag.synced.committedAt`}),` from `,_jsx(_components.code,{children:`lag.upstream.committedAt`}),` for a time delta, or read `,_jsx(_components.code,{children:`lag.snapshotsBehind`}),` / `,_jsx(_components.code,{children:`lag.percentDataIngested`}),`. There is deliberately no single “lag in seconds” field.`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`My sync shows `,_jsx(_components.code,{children:`COMPLETED`}),` but the table is empty or stale — why?`]}),` A snapshot whose segment generation keeps failing is retried up to `,_jsx(_components.code,{children:`maxRetries`}),` (default 3) runs, then abandoned; a later run with no newer snapshot then reports `,_jsx(_components.code,{children:`COMPLETED`}),` with `,_jsx(_components.code,{children:`segmentsUploaded: 0`}),`, and `,_jsx(_components.code,{children:`fileOnboardingRun`}),` — which only ever describes the run happening now — hides the earlier failures. Compare `,_jsx(_components.code,{children:`filesDiscovered`}),` vs `,_jsx(_components.code,{children:`segmentsUploaded`}),`, check `,_jsx(_components.code,{children:`syncState`}),`, and check `,_jsx(_components.code,{children:`snapshotIngestion.consecutiveFailedRuns`}),` / `,_jsx(_components.code,{children:`lastRunError`}),` for the hidden failure streak. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/troubleshooting#sync-says-completed-but-no-data-lands`,children:`Sync says COMPLETED but no data lands`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can I monitor sync from dashboards instead of polling the API?`}),` The controller emits per-phase sync timers (`,_jsx(_components.code,{children:`EXTERNAL_TABLE_SYNC_*_TIME_MS`}),`) for latency dashboards, but there is no lag or per-run success/failure metric — alert on freshness and failures through the status API. See `,_jsx(_components.a,{href:`/corecapabilities/external-table/observability#metrics-and-alerting`,children:`Metrics and alerting`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"FAQ","sidebarTitle":"FAQ","icon":"circle-question","description":"Answers to common questions about StarTree External Tables — supported sources, onboarding, schema, indexes, performance, and operations.","href":"/corecapabilities/external-table/faq"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"General","slug":"general","depth":2,"children":[]},{"title":"Onboarding \u0026 sync","slug":"onboarding-\u0026-sync","depth":2,"children":[]},{"title":"Schema \u0026 data types","slug":"schema-\u0026-data-types","depth":2,"children":[]},{"title":"Indexes","slug":"indexes","depth":2,"children":[]},{"title":"Performance \u0026 caching","slug":"performance-\u0026-caching","depth":2,"children":[]},{"title":"Operations","slug":"operations","depth":2,"children":[]},{"title":"Monitoring \u0026 observability","slug":"monitoring-\u0026-observability","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"startree","siteName":"StarTree Docs","title":"FAQ - StarTree Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T10:07:27.671Z","originalFileLocation":"corecapabilities/external-table/faq.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=\"Answers to common questions about StarTree External Tables — supported sources, onboarding, schema, indexes, performance, and operations.\">\u003cmeta data-mint-head name=\"application-name\" content=\"StarTree Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/startree/MPu5OTEB_mUqJ4Ku/_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/startree/MPu5OTEB_mUqJ4Ku/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/startree/MPu5OTEB_mUqJ4Ku/_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/startree/MPu5OTEB_mUqJ4Ku/_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/startree/MPu5OTEB_mUqJ4Ku/_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/startree/MPu5OTEB_mUqJ4Ku/_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/startree/MPu5OTEB_mUqJ4Ku/_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/startree/MPu5OTEB_mUqJ4Ku/_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/startree/MPu5OTEB_mUqJ4Ku/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"FAQ - StarTree Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Answers to common questions about StarTree External Tables — supported sources, onboarding, schema, indexes, performance, and operations.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"StarTree Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.startree.ai/corecapabilities/external-table/faq\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://startree.mintlify.site/_mintlify/api/og/v2?division=Operations+%26+Help\u0026amp;title=FAQ\u0026amp;description=Answers+to+common+questions+about+StarTree+External+Tables+%E2%80%94+supported+sources%2C+onboarding%2C+schema%2C+indexes%2C+performance%2C+and+operations.\u0026amp;theme=f89bf1599ae6d53abb8246c2\u0026amp;signature=b7c4c1f459e397d09124a21b3f1486513a7f4d532ce902e8aa91a01e22c2c968\">\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=\"FAQ - StarTree Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Answers to common questions about StarTree External Tables — supported sources, onboarding, schema, indexes, performance, and operations.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://startree.mintlify.site/_mintlify/api/og/v2?division=Operations+%26+Help\u0026amp;title=FAQ\u0026amp;description=Answers+to+common+questions+about+StarTree+External+Tables+%E2%80%94+supported+sources%2C+onboarding%2C+schema%2C+indexes%2C+performance%2C+and+operations.\u0026amp;theme=f89bf1599ae6d53abb8246c2\u0026amp;signature=b7c4c1f459e397d09124a21b3f1486513a7f4d532ce902e8aa91a01e22c2c968\">\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/startree/MPu5OTEB_mUqJ4Ku/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"StarTree Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#145C84\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.startree.ai/corecapabilities/external-table/faq\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/corecapabilities/external-table/faq.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.startree.ai/#organization\",\"name\":\"StarTree Docs\",\"url\":\"https://docs.startree.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/startree/ydxOgkfeGyqN5wki/logo/light.png?fit=max\u0026auto=format\u0026n=ydxOgkfeGyqN5wki\u0026q=85\u0026s=41cae4dd8179ebb4a14c5dff27a33d15\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.startree.ai#website\",\"name\":\"StarTree Docs\",\"url\":\"https://docs.startree.ai\",\"publisher\":{\"@id\":\"https://docs.startree.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.startree.ai/corecapabilities/external-table/faq#webpage\",\"url\":\"https://docs.startree.ai/corecapabilities/external-table/faq\",\"name\":\"FAQ\",\"description\":\"Answers to common questions about StarTree External Tables — supported sources, onboarding, schema, indexes, performance, and operations.\",\"dateModified\":\"2026-11-05T10:07:27.671Z\",\"isPartOf\":{\"@id\":\"https://docs.startree.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.startree.ai/corecapabilities/external-table/faq#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.startree.ai/corecapabilities/external-table/faq#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"External Tables\",\"item\":\"https://docs.startree.ai/corecapabilities/external-table/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Operations \u0026 Help\",\"item\":\"https://docs.startree.ai/corecapabilities/external-table/observability\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"FAQ\",\"item\":\"https://docs.startree.ai/corecapabilities/external-table/faq\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.startree.ai/corecapabilities/external-table/faq#article\",\"headline\":\"FAQ\",\"name\":\"FAQ\",\"description\":\"Answers to common questions about StarTree External Tables — supported sources, onboarding, schema, indexes, performance, and operations.\",\"url\":\"https://docs.startree.ai/corecapabilities/external-table/faq\",\"mainEntityOfPage\":{\"@id\":\"https://docs.startree.ai/corecapabilities/external-table/faq#webpage\"},\"dateModified\":\"2026-11-05T10:07:27.671Z\",\"publisher\":{\"@id\":\"https://docs.startree.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.startree.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"StarTree Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"StarTree Docs","nav":{"global":null,"tabs":[{"tab":"Home","pages":[{"title":"Home","href":""}]},{"tab":"StarTree Cloud","groups":[{"group":"Get Started","pages":[{"group":"StarTree Cloud","icon":"cloud","pages":[{"title":"Overview","icon":"cloud-binary","href":"/concepts/about-startree-cloud"},{"title":"Architecture","icon":"sitemap","href":"/getstarted/deployment/components_deployed"},{"title":"Products","icon":"list-timeline","href":"/getstarted/products"},{"title":"Deployment Options","icon":"network-wired","href":"/getstarted/deployment/deployment_models"},{"title":"Security and Compliance","icon":"file-certificate","href":"/getstarted/deployment/security_certifications"}]},{"title":"What is Real-Time Analytics?","icon":"display-chart-up","href":"/concepts/what-is-real-time-analytics"}]},{"group":"Ingestion","pages":[{"title":"Ingest Data","sidebarTitle":"Overview","icon":"database","href":"/corecapabilities/ingestdata/ingest_data_overview"},{"group":"Connectors","icon":"display-code","pages":[{"group":"Streaming Sources","icon":"wind","pages":[{"title":"Connect to Apache Kafka","sidebarTitle":"Apache Kafka","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/kafka.svg","href":"/corecapabilities/ingestdata/dataportal/streaming/kafka"},{"title":"Connect to Confluent Cloud","sidebarTitle":"Confluent Cloud","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/confluent.svg","href":"/corecapabilities/ingestdata/dataportal/streaming/confluent"},{"title":"Connect to StreamNative Kafka","sidebarTitle":"StreamNative Kafka","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/streamnative_kafka.svg","href":"/corecapabilities/ingestdata/dataportal/streaming/streamnative"},{"title":"Connect to Amazon Kinesis","sidebarTitle":"Amazon Kinesis","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/kinesis.svg","href":"/corecapabilities/ingestdata/dataportal/streaming/kinesis"},{"title":"Connect to Redpanda","sidebarTitle":"Redpanda","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/redpanda.svg","href":"/corecapabilities/ingestdata/dataportal/streaming/redpanda"},{"title":"Connect to Aiven Kafka","sidebarTitle":"Aiven Kafka","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/aiven_kafka.svg","href":"/corecapabilities/ingestdata/dataportal/streaming/aiven"},{"title":"Connect to WarpStream","sidebarTitle":"WarpStream","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/warpstream_kafka.svg","href":"/corecapabilities/ingestdata/dataportal/streaming/warpstream"},{"title":"Connect to MSK - Managed Apache Kafka by AWS","sidebarTitle":"Amazon MSK","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/aws_msk.svg","href":"/corecapabilities/ingestdata/dataportal/streaming/aws_msk"},{"title":"Connect MongoDB","sidebarTitle":"MongoDB","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/mongodb.svg","href":"/corecapabilities/ingestdata/mongodb"}]},{"group":"Batch Sources","icon":"folder-arrow-up","pages":[{"title":"Connect to Amazon S3","sidebarTitle":"Amazon S3","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/s3.svg","href":"/corecapabilities/ingestdata/dataportal/batch/s3"},{"title":"Connect to Google Cloud Storage (GCS)","sidebarTitle":"Google Cloud Storage","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/gcs.svg","href":"/corecapabilities/ingestdata/dataportal/batch/gcs"},{"title":"Connect to Azure Data Lake Storage (ADLS)","sidebarTitle":"ADLS","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/adls.svg","href":"/corecapabilities/ingestdata/dataportal/batch/adls"},{"title":"Connect to Delta Lake","sidebarTitle":"Delta Lake","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/deltalake.svg","href":"/corecapabilities/ingestdata/dataportal/batch/deltalake"},{"title":"Connect to Snowflake","sidebarTitle":"Snowflake","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/snowflake.svg","href":"/corecapabilities/ingestdata/dataportal/batch/snowflake"},{"title":"Connect to Google BigQuery","sidebarTitle":"BigQuery","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/bigquery.svg","href":"/corecapabilities/ingestdata/dataportal/batch/bigquery"},{"title":"Upload any file","sidebarTitle":"Upload File","icon":"https://mintlify.s3.us-west-1.amazonaws.com/startree/images/icons/datasource/file_upload.svg","href":"/corecapabilities/ingestdata/dataportal/batch/upload"}]},{"title":"Connect to Any Data Source","icon":"arrow-up-right-from-square","href":"/corecapabilities/ingestdata/dataportal/custom-connection"}]},{"group":"Data Modeling","icon":"objects-column","pages":[{"title":"Overview","icon":"line-columns","href":"/corecapabilities/ingestdata/dataportal/data-modeling/overview"},{"title":"Examples","icon":"table","href":"/corecapabilities/ingestdata/dataportal/data-modeling/concepts"},{"title":"JSON Unnesting","icon":"diagram-nested","href":"/corecapabilities/ingestdata/dataportal/data-modeling/unnesting-json"},{"title":"Map type","icon":"map","href":"/corecapabilities/ingestdata/dataportal/data-modeling/maptype"},{"icon":"timer","title":"Dealing with TimeZones","href":"/corecapabilities/ingestdata/dataportal/data-modeling/timezones"}]},{"title":"Additional Configuration","icon":"gear","href":"/corecapabilities/ingestdata/dataportal/additional-config-create-table"},{"group":"Advanced Operations","icon":"screwdriver-wrench","pages":[{"group":"Streaming Ingestion","icon":"wind","pages":[{"title":"Streaming Ingestion in Apache Pinot","sidebarTitle":"Overview","icon":"bars","href":"/corecapabilities/ingestdata/adv-concepts/realtime/overview"},{"title":"AZ Aware Kafka ingestion in Pinot","sidebarTitle":"AZ aware ingestion","icon":"sliders","href":"/corecapabilities/ingestdata/adv-concepts/realtime/az-aware-kafka"},{"title":"Pauseless Consumption","icon":"arrow-up-right-from-square","href":"/corecapabilities/ingestdata/adv-concepts/realtime/pauseless-consumption"},{"title":"MongoDB CDC Ingestion","sidebarTitle":"MongoDB CDC","icon":"database","href":"/corecapabilities/ingestdata/adv-concepts/realtime/mongodb-cdc"},{"group":"Message Decoders","icon":"arrow-down-from-dotted-line","pages":[{"title":"Message Decoders","sidebarTitle":"Overview","href":"/corecapabilities/ingestdata/adv-concepts/realtime/decoders/overview"},{"title":"JSON Message Decoder","sidebarTitle":"JSON","href":"/corecapabilities/ingestdata/adv-concepts/realtime/decoders/json"},{"title":"Avro Message Decoder","sidebarTitle":"Avro","href":"/corecapabilities/ingestdata/adv-concepts/realtime/decoders/avro"},{"title":"AWS Glue Schema Registry Avro Decoder","sidebarTitle":"AWS Glue Schema Registry","href":"/corecapabilities/ingestdata/adv-concepts/realtime/decoders/glue"},{"title":"Protobuf Message Decoder","sidebarTitle":"Protobuf","href":"/corecapabilities/ingestdata/adv-concepts/realtime/decoders/protobuf"},{"title":"Debezium Message Decoder","sidebarTitle":"Debezium","href":"/corecapabilities/ingestdata/adv-concepts/realtime/decoders/debezium"},{"title":"Amazon DynamoDB Message Decoder","sidebarTitle":"DynamoDB","href":"/corecapabilities/ingestdata/adv-concepts/realtime/decoders/dynamodb"},{"title":"Prometheus Message Decoder","sidebarTitle":"Prometheus","href":"/corecapabilities/ingestdata/adv-concepts/realtime/decoders/prometheus"}]}]},{"group":"Batch Ingestion","icon":"folder-arrow-up","pages":[{"title":"Batch Ingestion in Apache Pinot with Minions","sidebarTitle":"Overview","icon":"bars","href":"/corecapabilities/ingestdata/adv-concepts/batch/overview"},{"title":"Atomic Ingestion","sidebarTitle":"Atomic Ingestion","icon":"list-timeline","href":"/corecapabilities/ingestdata/adv-concepts/batch/atomic-sync-consistent-push"},{"title":"Delta Lake Ingestion","sidebarTitle":"Delta Lake Ingestion","icon":"triangle","href":"/corecapabilities/ingestdata/adv-concepts/batch/delta-lake-connector"},{"title":"File Ingestion","sidebarTitle":"File Ingestion","icon":"file-export","href":"/corecapabilities/ingestdata/adv-concepts/batch/file-ingestion-task"},{"title":"SQL Ingestion","sidebarTitle":"SQL Ingestion","icon":"code","href":"/corecapabilities/ingestdata/adv-concepts/batch/sql-connector"},{"title":"Offline Upserts","icon":"file-lines","href":"/corecapabilities/ingestdata/adv-concepts/batch/offline-upserts"},{"title":"Minion Task Orchestration","icon":"diagram-project","href":"/corecapabilities/ingestdata/adv-concepts/batch/minion-task-orchestration"}]}]},{"group":"Recipes","icon":"wind","pages":[{"title":"IAM-Role Based Access for Kinesis","sidebarTitle":"IAM Role for Kinesis","href":"/corecapabilities/ingestdata/recipes/iam-role-kinesis"},{"title":"IAM-Role Based Access for S3","sidebarTitle":"IAM Role for S3","href":"/corecapabilities/ingestdata/recipes/iam-role-s3"},{"title":"Fix Row Count Mismatches for Databricks CDC Delta Tables","sidebarTitle":"Databricks CDC Row Counts","href":"/corecapabilities/ingestdata/recipes/delta-databricks-cdc-row-counts"}]},{"title":"Troubleshooting ingestion","sidebarTitle":"Troubleshooting","icon":"arrow-down-to-line","href":"/corecapabilities/ingestdata/troubleshooting"}]},{"group":"External Tables","pages":[{"title":"External Tables Overview","sidebarTitle":"Overview","icon":"house","href":"/corecapabilities/external-table/overview"},{"title":"Support Matrix","icon":"table-cells","href":"/corecapabilities/external-table/support-matrix"},{"group":"Getting Started","icon":"compass","pages":[{"title":"Getting Started: Query Parquet Without a Catalog","sidebarTitle":"Query Parquet Directly","icon":"folder-tree","href":"/corecapabilities/external-table/getting-started/query-without-a-catalog"},{"title":"Getting Started: Connect a Data Catalog","sidebarTitle":"Connect a Catalog","icon":"book-open","href":"/corecapabilities/external-table/getting-started/connect-a-catalog"},{"title":"Getting Started: Speed Up External Table Queries","sidebarTitle":"Speed Up Queries","icon":"gauge-high","href":"/corecapabilities/external-table/getting-started/speed-up-queries"}]},{"group":"Catalogs \u0026 Sources","icon":"database","expanded":true,"pages":[{"group":"Unity Catalog","icon":"diagram-project","pages":[{"title":"Unity Catalog: Onboarding via Data Portal","sidebarTitle":"Onboarding via Data Portal","icon":"display","href":"/corecapabilities/external-table/unity/onboarding-data-portal"},{"title":"Unity Catalog: Onboarding via API","sidebarTitle":"Onboarding via API","icon":"code","href":"/corecapabilities/external-table/unity/onboarding-api"}]},{"group":"Hive Metastore","icon":"warehouse","pages":[{"title":"Hive Metastore: Onboarding via API","sidebarTitle":"Onboarding via API","icon":"code","href":"/corecapabilities/external-table/hive/onboarding-api"},{"title":"Hive Metastore: Onboarding via SQL DDL","sidebarTitle":"Onboarding via SQL DDL","icon":"terminal","href":"/corecapabilities/external-table/hive/onboarding-sql-ddl"}]},{"group":"Apache Polaris \u0026 Open Catalog","icon":"code-branch","pages":[{"title":"Apache Polaris \u0026 Snowflake Open Catalog: Onboarding via Data Portal","sidebarTitle":"Onboarding via Data Portal","icon":"display","href":"/corecapabilities/external-table/polaris/onboarding-data-portal"},{"title":"Apache Polaris \u0026 Snowflake Open Catalog: Onboarding via API","sidebarTitle":"Onboarding via API","icon":"code","href":"/corecapabilities/external-table/polaris/onboarding-api"}]},{"group":"AWS Glue","icon":"cloud","pages":[{"title":"AWS Glue: Onboarding via Data Portal","sidebarTitle":"Onboarding via Data Portal","icon":"display","href":"/corecapabilities/external-table/glue/onboarding-data-portal"},{"title":"AWS Glue: Onboarding via API","sidebarTitle":"Onboarding via API","icon":"code","href":"/corecapabilities/external-table/glue/onboarding-api"}]},{"group":"Amazon S3 Tables","icon":"table-cells","pages":[{"title":"Amazon S3 Tables: Onboarding via Data Portal","sidebarTitle":"Onboarding via Data Portal","icon":"display","href":"/corecapabilities/external-table/s3tables/onboarding-data-portal"},{"title":"Amazon S3 Tables: Onboarding via API","sidebarTitle":"Onboarding via API","icon":"code","href":"/corecapabilities/external-table/s3tables/onboarding-api"}]},{"group":"Snowflake Horizon Catalog","icon":"snowflake","pages":[{"title":"Snowflake Horizon Catalog: Onboarding via Data Portal","sidebarTitle":"Onboarding via Data Portal","icon":"display","href":"/corecapabilities/external-table/horizon/onboarding-data-portal"},{"title":"Snowflake Horizon Catalog: Onboarding via API","sidebarTitle":"Onboarding via API","icon":"code","href":"/corecapabilities/external-table/horizon/onboarding-api"}]},{"group":"S3 Data Lake","icon":"hard-drive","pages":[{"title":"S3: Onboarding via Data Portal","sidebarTitle":"Onboarding via Data Portal","icon":"display","href":"/corecapabilities/external-table/s3/onboarding-data-portal"},{"title":"S3: Onboarding via API","sidebarTitle":"Onboarding via API","icon":"code","href":"/corecapabilities/external-table/s3/onboarding-api"}]},{"group":"GCS Data Lake","icon":"folder-open","pages":[{"title":"GCS Data Lake: Onboarding via Data Portal","sidebarTitle":"Onboarding via Data Portal","icon":"display","href":"/corecapabilities/external-table/gcs/onboarding-data-portal"},{"title":"GCS Data Lake: Onboarding via API","sidebarTitle":"Onboarding via API","icon":"code","href":"/corecapabilities/external-table/gcs/onboarding-api"}]}]},{"group":"Guides \u0026 Reference","icon":"book","pages":[{"title":"Data Type Mapping","sidebarTitle":"Data Type Mapping","icon":"table","href":"/corecapabilities/external-table/data-type-mapping"},{"title":"Supported Indexes","sidebarTitle":"Indexes","icon":"filter","href":"/corecapabilities/external-table/indexes"},{"title":"Best Practices and Configs","sidebarTitle":"Best Practices \u0026 Configs","icon":"gear","href":"/corecapabilities/external-table/best-practices-and-configs"},{"title":"Advanced Sizing \u0026 Operational Guidance","sidebarTitle":"Advanced Guidance","icon":"compass","href":"/corecapabilities/external-table/operational-guidance"},{"title":"Data and Index caching","icon":"wind","href":"/corecapabilities/external-table/data-and-index-caching"},{"title":"Data Export Task: Parquet Writer","sidebarTitle":"Data Export Task: Parquet Writer","icon":"file-export","href":"/corecapabilities/external-table/data-export-task"},{"title":"SQL DDL: CREATE TABLE ... WITH","sidebarTitle":"SQL DDL","icon":"terminal","href":"/corecapabilities/external-table/sql-ddl"},{"title":"Large External Tables","sidebarTitle":"Large External Tables","icon":"layer-group","href":"/corecapabilities/external-table/segment-groups"},{"title":"Iceberg Deletion Vectors","sidebarTitle":"Deletion Vectors","icon":"eraser","href":"/corecapabilities/external-table/deletion-vectors"},{"title":"Time-window file filter","sidebarTitle":"Time-window file filter","icon":"calendar-days","href":"/corecapabilities/external-table/time-window-file-filter"},{"title":"Iceberg Partition Pruning","sidebarTitle":"Partition Pruning","icon":"scissors","href":"/corecapabilities/external-table/partition-pruning"},{"title":"VARIANT columns (OPEN_STRUCT)","sidebarTitle":"VARIANT Columns","icon":"brackets-curly","href":"/corecapabilities/external-table/variant-open-struct"},{"title":"Schema Evolution","icon":"code-compare","href":"/corecapabilities/external-table/schema-evolution"}]},{"group":"Operations \u0026 Help","icon":"gauge","pages":[{"title":"Observability","icon":"chart-line","href":"/corecapabilities/external-table/observability"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","icon":"wrench","description":"Symptom-based fixes for common External Table onboarding, schema, query, and sync errors, indexed by the exact error string to search for.","href":"/corecapabilities/external-table/troubleshooting"},{"title":"FAQ","sidebarTitle":"FAQ","icon":"circle-question","href":"/corecapabilities/external-table/faq"}]}]},{"group":"Query Data","pages":[{"group":"Query Languages","icon":"code","pages":[{"title":"SQL","icon":"code","description":null,"href":"/corecapabilities/query_data/query_languages/sql"},{"title":"Multi-Stage Query Engine","sidebarTitle":"MSQE","icon":"bars-staggered","href":"/corecapabilities/query_data/query_languages/msqe"},{"title":"StarTree Execution Engine","sidebarTitle":"StarTree Execution Engine","icon":"bolt","href":"/corecapabilities/query_data/query_languages/startree-engine"},{"title":"PromQL","icon":"file-code","href":"/corecapabilities/query_data/query_languages/promql"}]},{"title":"Multi-Stage Materialized Views","sidebarTitle":"Multi-Stage Materialized Views","icon":"diagram-project","hidden":true,"href":"/corecapabilities/query_data/materialized-views/multi-stage-materialized-views"},{"group":"Query Interfaces","icon":"display-code","pages":[{"title":"Query Console","href":"/corecapabilities/query_data/query_interfaces/query_console"},{"title":"Querying Pinot using the REST API","sidebarTitle":"Query using REST API","href":"/corecapabilities/query_data/query_interfaces/query-using-rest-API"},{"title":"Connecting to StarTree Cloud via Java","sidebarTitle":"Connect via Java","href":"/corecapabilities/query_data/query_interfaces/connect-via-java"},{"title":"Connecting to StarTree Cloud via Node.js","sidebarTitle":"Connect via Node.js","href":"/corecapabilities/query_data/query_interfaces/connect-via-nodejs"},{"title":"Connecting to StarTree Cloud using Python","sidebarTitle":"Connect using Python","href":"/corecapabilities/query_data/query_interfaces/connect-via-python"},{"title":"Using the Pinot Proxy","href":"/corecapabilities/query_data/query_interfaces/pinot-proxy"}]},{"group":"Query Functions","icon":"code","pages":[{"title":"JSON Extract Index ","href":"/corecapabilities/query_data/functions/json_extract_index"},{"title":"Lookup UDF Join","href":"/corecapabilities/query_data/functions/lookup-udf-join"}]},{"group":"Advanced Operations","icon":"screwdriver-wrench","pages":[{"title":"Cursor Pagination","sidebarTitle":"Cursor Pagination","href":"/corecapabilities/query_data/advanced_operations/cursor-pagination"},{"title":"Pagination","sidebarTitle":"Pagination","href":"/corecapabilities/query_data/advanced_operations/pagination"},{"title":"Binary scheduler for workload isolation","sidebarTitle":"Binary scheduler","href":"/corecapabilities/query_data/advanced_operations/workload-isolation/binary-scheduler"},{"title":"Query Quotas in Apache Pinot","sidebarTitle":"Query Quotas","href":"/corecapabilities/query_data/advanced_operations/query-quotas"},{"title":"Decoupled Intermediate Stages for MSE","sidebarTitle":"Decoupled MSE mode","href":"/corecapabilities/query_data/advanced_operations/intermediate-stage-on-broker"},{"title":"Replica Group based Workload Isolation","href":"/corecapabilities/query_data/advanced_operations/replica-group-based-workload-isolation"},{"title":"Index-Based DISTINCT in Apache Pinot","href":"/corecapabilities/query_data/advanced_operations/fast-distinct-with-inverted-index"},{"title":"Query Logger","href":"/corecapabilities/query_data/advanced_operations/query-logger"}]},{"title":"Query Analyzer","sidebarTitle":"Query Analyzer","icon":"wand-magic-sparkles","href":"/corecapabilities/query_data/query-analyzer"},{"title":"StarTree MCP server","icon":"brain","href":"/corecapabilities/query_data/mcp/startree-mcp"},{"title":"Troubleshooting queries","sidebarTitle":"Troubleshooting","icon":"magnifying-glass-chart","href":"/corecapabilities/query_data/troubleshooting"}]},{"group":"Manage Data","pages":[{"group":"Indexes","icon":"list-tree","pages":[{"title":"Overview","href":"/corecapabilities/manage-data/indexes/overview"},{"title":"Bloom Filter Index","mode":"wide","href":"/corecapabilities/manage-data/indexes/bloom-filter"},{"title":"Composite JSON Index","href":"/corecapabilities/manage-data/indexes/composite-json-index"},{"title":"Dictionary Index","href":"/corecapabilities/manage-data/indexes/dictionary-index"},{"title":"Forward Index","href":"/corecapabilities/manage-data/indexes/forward-index"},{"title":"FST Index","href":"/corecapabilities/manage-data/indexes/fst-index"},{"group":"GeoSpatial Index","pages":[{"title":"GeoSpatial Overview","href":"/corecapabilities/manage-data/indexes/geospatial-index"},{"title":"GeoSpatial Data Types \u0026 Formats","href":"/corecapabilities/manage-data/indexes/geospatial-data-types"},{"title":"GeoSpatial Functions Reference","href":"/corecapabilities/manage-data/indexes/geospatial-functions"},{"title":"GeoSpatial Index Configuration","href":"/corecapabilities/manage-data/indexes/geospatial-configuration"},{"title":"GeoSpatial Performance \u0026 Optimization","href":"/corecapabilities/manage-data/indexes/geospatial-performance"},{"title":"GeoSpatial Examples \u0026 Use Cases","href":"/corecapabilities/manage-data/indexes/geospatial-examples"}]},{"title":"Inverted Index","href":"/corecapabilities/manage-data/indexes/inverted-index"},{"title":"JSON Index","href":"/corecapabilities/manage-data/indexes/json-index"},{"title":"Min/Max Index","href":"/corecapabilities/manage-data/indexes/minmax-index"},{"title":"Range Index","href":"/corecapabilities/manage-data/indexes/range-index"},{"title":"Sparse Index","href":"/corecapabilities/manage-data/indexes/sparse-index"},{"title":"Star-tree Index","href":"/corecapabilities/manage-data/indexes/startree-index"},{"title":"Text Index (Lucene)","href":"/corecapabilities/manage-data/indexes/text-index"},{"title":"Timestamp Index","href":"/corecapabilities/manage-data/indexes/timestamp-index"},{"title":"Vector Index","href":"/corecapabilities/manage-data/indexes/vector-index"}]},{"group":"Upserts","icon":"file-import","pages":[{"title":"Off-Heap Upserts","href":"/corecapabilities/manage-data/offheap-upsert"},{"title":"Merge JSON fields during partial upsert","sidebarTitle":"Merge JSON fields","href":"/corecapabilities/manage-data/merge-json"},{"title":"Compaction after Upserts","href":"/corecapabilities/manage-data/upsert-compaction-srt"}]},{"title":"Off-Heap Deduplication","sidebarTitle":"Off-Heap Dedup","icon":"clone","href":"/corecapabilities/manage-data/offheap-dedup"},{"group":"Cloud Tiered Storage","icon":"warehouse","pages":[{"title":"Motivation","href":"/corecapabilities/manage-data/set-up-tiered-storage/motivation"},{"title":"Tiered storage for Apache Pinot in StarTree Cloud","sidebarTitle":"Tiered storage with S3","href":"/corecapabilities/manage-data/set-up-tiered-storage/architecture"},{"title":"Set up Tiered Storage with Cloud Object Store","sidebarTitle":"Setup Guide","href":"/corecapabilities/manage-data/set-up-tiered-storage/setup"},{"title":"Use Sparse Index","href":"/corecapabilities/manage-data/set-up-tiered-storage/use-sparse-index"},{"title":"Text Index support for Tiered Storage","sidebarTitle":"Use Text Index","href":"/corecapabilities/manage-data/set-up-tiered-storage/use-text-index"}]},{"title":"Custom Partition Function","icon":"table-columns","href":"/corecapabilities/manage-data/custom-partition-function"},{"title":"Hybrid Tables","icon":"mixer","href":"/corecapabilities/manage-data/hybrid-tables"},{"group":"Table Storage","icon":"hard-drive","pages":[{"title":"Table Storage Usage","icon":"chart-pie","href":"/corecapabilities/manage-data/table-storage-usage"},{"title":"Storage efficiency","sidebarTitle":"Storage efficiency","icon":"compress","href":"/corecapabilities/manage-data/storage-efficiency"}]},{"group":"Data Operations","icon":"file-binary","pages":[{"group":"Alter Table","icon":"table","pages":[{"title":"Alter Table Task","href":"/corecapabilities/manage-data/alter-table-task"},{"title":"Deep Store Segment Sync","sidebarTitle":"Deep Store Sync","href":"/corecapabilities/manage-data/deep-store-sync"},{"title":"Segment Refresh Task","href":"/corecapabilities/manage-data/segment-refresh-task"}]},{"title":"Segment Purge Task","icon":"folder-minus","href":"/corecapabilities/manage-data/purge-task"},{"title":"Segment Backfill Task","sidebarTitle":"Data Backfill","icon":"delete-left","href":"/corecapabilities/manage-data/segment-backfill-task"},{"title":"Segment Import Task","icon":"arrow-up-from-line","href":"/corecapabilities/manage-data/segment-import-task"},{"title":"Segment Operation Throttling","sidebarTitle":"Segment Operation Throttling","icon":"gauge","href":"/corecapabilities/manage-data/segment-operation-throttling"},{"title":"Schema Evolution","icon":"file-spreadsheet","href":"/corecapabilities/manage-data/schema-evolution"}]},{"group":"Recipes","icon":"wind","pages":[{"title":"Managing Adhoc Minion Tasks Programmatically","icon":"bolt","href":"/corecapabilities/manage-data/recipes/adhoc-task-trigger"},{"title":"Segment Count Limits","icon":"gauge-high","href":"/corecapabilities/manage-data/recipes/segment-count-limits"}]}]},{"group":"Observability","icon":"heart-pulse","pages":[{"title":"Troubleshooting: start here","sidebarTitle":"Troubleshooting: start here","icon":"stethoscope","href":"/corecapabilities/observability/troubleshooting"},{"group":"Monitor your cluster","icon":"gauge","pages":[{"title":"Table Health Dashboard \u0026 Alerting","sidebarTitle":"Table health and email alerts","icon":"heart-pulse","href":"/corecapabilities/observability/table-health-and-alerting"},{"title":"Health checks","sidebarTitle":"Health checks","icon":"clipboard-check","href":"/corecapabilities/observability/health-checks"},{"title":"Task Observability","sidebarTitle":"Minion task runs","icon":"list-check","href":"/corecapabilities/observability/minion-task-runs"},{"title":"Grafana dashboards","sidebarTitle":"Grafana dashboards","icon":"chart-mixed","href":"/corecapabilities/observability/grafana"},{"title":"Accessing logs","sidebarTitle":"Accessing logs","icon":"file-lines","href":"/corecapabilities/observability/access-logs"}]},{"group":"Alerts and metrics","icon":"bell","pages":[{"title":"Alerts and metrics","sidebarTitle":"Overview","icon":"bell","href":"/corecapabilities/observability/alerts/overview"},{"title":"Real-time ingestion alerts","sidebarTitle":"Real-time ingestion","icon":"arrow-down-to-line","href":"/corecapabilities/observability/alerts/real-time-ingestion"},{"title":"Query alerts","sidebarTitle":"Queries","icon":"magnifying-glass-chart","href":"/corecapabilities/observability/alerts/queries"},{"title":"Batch ingestion and minion task alerts","sidebarTitle":"Batch and minion tasks","icon":"list-check","href":"/corecapabilities/observability/alerts/batch-and-minion-tasks"},{"title":"Upsert table alerts","sidebarTitle":"Upsert tables","icon":"key","href":"/corecapabilities/observability/alerts/upsert-tables"},{"title":"Data availability and storage alerts","sidebarTitle":"Data availability and storage","icon":"layer-group","href":"/corecapabilities/observability/alerts/data-availability-and-storage"},{"title":"Platform health alerts","sidebarTitle":"Platform health","icon":"server","href":"/corecapabilities/observability/alerts/platform-health"}]},{"group":"Reference","icon":"book","pages":[{"title":"Troubleshooting by feature","sidebarTitle":"Troubleshooting by feature","icon":"list-tree","href":"/corecapabilities/observability/troubleshooting-by-feature"},{"title":"Data Portal Error Codes","sidebarTitle":"Data Portal error codes","icon":"circle-exclamation","href":"/corecapabilities/observability/error-codes"}]}]},{"group":"Visualize Data","icon":"chart-line","pages":[{"title":"Connect Tableau to StarTree Cloud","sidebarTitle":"Tableau","icon":"plus","href":"/corecapabilities/visualize_data/connect-tableau-to-startree-cloud"},{"title":"Connect Superset to StarTree Cloud","sidebarTitle":"Superset","icon":"infinity","href":"/corecapabilities/visualize_data/connect-superset-to-startree-cloud"},{"title":"Connect Grafana to StarTree Cloud","sidebarTitle":"Grafana","icon":"gauge-high","href":"/corecapabilities/visualize_data/connect-grafana-to-startree-cloud"}]},{"group":"Cluster Operations","icon":"server","pages":[{"title":"Scheduled Server Scaling","sidebarTitle":"Scheduled Server Scaling","icon":"clock","href":"/corecapabilities/cluster-operations/scheduled-server-scaling"},{"title":"Scheduled Broker Scaling","sidebarTitle":"Scheduled Broker Scaling","icon":"clock","href":"/corecapabilities/cluster-operations/scheduled-broker-scaling"},{"title":"Custom Plugins","sidebarTitle":"Custom Plugins","icon":"puzzle-piece","href":"/corecapabilities/cluster-operations/custom-plugins"},{"title":"Troubleshooting resource pressure","sidebarTitle":"Troubleshooting","icon":"gauge-high","href":"/corecapabilities/cluster-operations/troubleshooting"},{"title":"StarTree Cloud Portal","icon":"cloud","href":"/star-tree-cloud-portal"}]},{"group":"Manage Security","pages":[{"title":"Security Manager","sidebarTitle":"Overview","icon":"lock","href":"/corecapabilities/security/manage-security"},{"group":"Authorization","icon":"users-rectangle","pages":[{"title":"Managing Access","icon":"users-rectangle","href":"/corecapabilities/security/manage-access"},{"title":"Custom Policy Configuration","icon":"square-sliders-vertical","href":"/corecapabilities/security/custom-policies"},{"title":"Actions","icon":"folder-gear","href":"/corecapabilities/security/actions"},{"title":"Using the StarTree Role-Based Access Control (RBAC) API","sidebarTitle":"Using RBAC API","icon":"gear-code","href":"/corecapabilities/security/using-rbac-api"},{"title":"Row-Level Access Control","icon":"table-rows","href":"/corecapabilities/security/row-level-access-control"}]},{"title":"API Token Management","icon":"file-binary","href":"/corecapabilities/security/manage-api-tokens"},{"title":"Pinot Audit Configuration Guide","sidebarTitle":"Pinot Audit Logging","icon":"file-magnifying-glass","href":"/corecapabilities/security/audit/pinot-audit-logs"},{"group":"Configure IdP","icon":"fingerprint","pages":[{"title":"Google","href":"/corecapabilities/security/idp/google"},{"title":"Microsoft Entra ID","href":"/corecapabilities/security/idp/azure"},{"title":"Okta","href":"/corecapabilities/security/idp/okta"}]}]},{"group":"Release Notes","pages":[{"title":"StarTree Release Notes","sidebarTitle":"Overview","icon":"rocket","href":"/reference/startree-release-notes"},{"title":"Data Portal Release Notes","sidebarTitle":"Data Portal","icon":"browser","href":"/reference/startree-release-notes/data-portal"},{"title":"Release version 0.17.0: October 2026","sidebarTitle":"0.17.0","icon":"tag","href":"/reference/startree-release-notes/0.17.0"},{"title":"Release version 0.16.0: July 2026","sidebarTitle":"0.16.0","icon":"tag","href":"/reference/startree-release-notes/0.16.0"},{"group":"Older Releases","icon":"file","pages":[{"title":"Release version 0.15.0: April 2026","sidebarTitle":"0.15.0","href":"/reference/startree-release-notes/0.15.0"},{"title":"Release version 0.14.0: March 2026","sidebarTitle":"0.14.0","href":"/reference/startree-release-notes/0.14.0"},{"title":"Release version 0.12.0: February 2026","sidebarTitle":"0.12.0","href":"/reference/startree-release-notes/0.12.0"},{"title":"Release version 0.11.1: September 2025","sidebarTitle":"0.11.1","href":"/reference/startree-release-notes/0.11.1"},{"title":"Release Version 0.11.0: July 2025","sidebarTitle":"0.11.0","href":"/reference/startree-release-notes/0.11.0"},{"title":"Release Version 0.10.1: February 2025","sidebarTitle":"0.10.1","href":"/reference/startree-release-notes/0.10.1"},{"title":"Release Version 0.10.0: November 2024","sidebarTitle":"0.10.0","href":"/reference/startree-release-notes/0.10.0"},{"title":"Release Version 0.9.0: June 2024","sidebarTitle":"0.9.0","href":"/reference/startree-release-notes/0.9.0"},{"title":"Release Version 0.8.1: April-May 2024","sidebarTitle":"0.8.1","href":"/reference/startree-release-notes/0.8.1"},{"title":"Release Version 0.8.0: February 2024","sidebarTitle":"0.8.0","href":"/reference/startree-release-notes/0.8.0"},{"title":"Release Version 0.7.2: Dec 2023","sidebarTitle":"0.7.2","href":"/reference/startree-release-notes/0.7.2"},{"title":"Release Version 0.7.1: November 2023","sidebarTitle":"0.7.1","href":"/reference/startree-release-notes/0.7.1"},{"title":"Release Version 0.7.0: August 2023","sidebarTitle":"0.7.0","href":"/reference/startree-release-notes/0.7.0"},{"title":"Release Version 0.6.1: Apr 2023","sidebarTitle":"0.6.1","href":"/reference/startree-release-notes/0.6.1"},{"title":"Release Version 0.6.0: Feb 2023","sidebarTitle":"0.6.0","href":"/reference/startree-release-notes/0.6.0"},{"title":"Release Version 0.5.0: Jun-Aug 2022","sidebarTitle":"0.5.0","href":"/reference/startree-release-notes/0.5.0"},{"title":"Release Version 0.4.0: April-May 2022","sidebarTitle":"0.4.0","href":"/reference/startree-release-notes/0.4.0"}]}]},{"group":"Reference","pages":[{"title":"Glossary","icon":"file-lines","href":"/reference/glossary"},{"title":"Benefits of StarTree V2 Cloud Architecture","sidebarTitle":"StarTree Cloud V2 Benefits","icon":"arrow-trend-up","href":"/reference/cloud-v2-benefits"}]},{"group":"Internal/Hidden Pages","pages":[{"title":"Hidden Pages Index","sidebarTitle":"Hidden Pages Index","icon":"eye-slash","hidden":true,"href":"/internal"}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/home"}]},{"tab":"Powered by AI","pages":[{"title":"Powered by AI","href":"/corecapabilities/ai/overview"}]},{"tab":"ThirdEye","pages":[{"title":"ThirdEye","href":"/thirdeye/getting-started/free-tier-tutorial"}]},{"tab":"Apache Pinot Recipes","pages":[{"title":"Apache Pinot Recipes","href":"/recipes/recipes"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"FAQ - StarTree Docs","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":[],"chunks":[]}