Load every file from an Amazon S3 path into Firebolt exactly once, including files that arrive later, and keep each run cheap as the bucket grows.
A scheduled job watches an Amazon S3 prefix that grows over time and loads each new file into a
Firebolt table exactly once: none missed, none loaded twice. The first section is the simplest
version and works for any file layout; it lists the whole prefix on every run, which is fine until
the bucket grows large. The second section keeps each run cheap by listing only recent files, which
requires the files to be laid out by date.
This pattern identifies each file by its name, so treat files as immutable: write every object once
and never modify or overwrite it. A file overwritten after it has been loaded is not re-ingested
(its name is already recorded), so its new contents are silently missed.
This guide uses COPY FROM, which loads CSV, TSV, and Parquet. The same metadata columns and listing
pruning also apply when files are read through an external table or a read_* table-valued function
(read_parquet, read_csv, read_json), so the windowing carries over to those readers; JSON, for
example, is read that way rather than with COPY FROM. The pattern relies on two per-file metadata
columns that Firebolt populates for every external file (the leading $ marks a metadata virtual
column; for the full list, see Using metadata virtual columns in
Work with external tables):
Column
Type
Role
$source_file_name
TEXT
The object key without the bucket. A stable unique id per file: it is the deduplication key, and the value you filter on to restrict which keys are listed.
Record the identity of the file each row came from, so later runs can tell what is already loaded.
CREATE TABLE events ( -- data columns, replace these with your actual schema id INTEGER, val TEXT, -- bookkeeping source_file_name TEXT NOT NULL, -- from $source_file_name (unique per file) source_file_timestamp TIMESTAMPTZ NOT NULL -- from $source_file_timestamp);
A file contributes many rows, all sharing the same source_file_name and source_file_timestamp, so an aggregating index
grouped by those two columns holds one entry per file. The NOT EXISTS check then reads one row per
file from the index, so it needs no explicit DISTINCT and never scans the base table:
CREATE AGGREGATING INDEX events_files ON events (source_file_timestamp, source_file_name);
Each run issues the same COPY FROM, keyed on the file name:
COPY INTO events (id, val, source_file_name $source_file_name, source_file_timestamp $source_file_timestamp)FROM 's3://my_bucket/events/'WITH TYPE = PARQUET PATTERN = '*.parquet' AUTO_CREATE = FALSEWHERE NOT EXISTS (SELECT 1 FROM events e WHERE e.source_file_name = $source_file_name);
$source_file_name is the object key, a unique id for a file. The NOT EXISTS clause skips any file
already in the table, so a repeated or retried run never duplicates a row, and every new file is
picked up on the next run. Two rules make this reliable:
Do not let two runs overlap. Each run reads the set of already-loaded files before it inserts,
so two runs at once would both see a new file as absent and load it twice (COPY inserts rows and
enforces no unique constraint on source_file_name). Serialize the job to at most one run in flight, for
example with a scheduler concurrency limit of one or an external lock.
“No new files” is reported as an error. When the WHERE clause matches nothing, COPY FROM
returns No file found at URL: ... Check url, object pattern, and condition in WHERE clause. Treat
this as a successful no-op meaning zero new files.
To load history that predates the job, run this same statement once as a backfill.This version lists every object under events/ on each run. That is fine for a modest bucket. Once
the history grows large, the next section removes that cost.
Listing the whole prefix costs work proportional to the number of files, so a job that runs forever
does work proportional to n squared over its lifetime. S3 listing is a real cost factor: each
ListObjects request is billed and returns object keys in sorted (lexicographic) order, and the only
server-side filter it accepts is a common key prefix. So the one way to list less is to restrict the
object name to a prefix, which works when the files you want share a leading one.
┌────────────────────────────────────────────────┐│ scheduler: run the same COPY every few minutes │└───────────────────────┬────────────────────────┘ ▼┌────────────────────────────────────────────────┐│ COPY INTO events ... WHERE ││ $source_file_name LIKE 'events/dt=<day>/%' │ ▶ list only recent prefixes in S3│ AND NOT EXISTS (row already loaded) │ ▶ drop already-loaded files└───────────────────────┬────────────────────────┘ ▼┌────────────────────────────────────────────────┐│ rows for new files only, inserted once │└────────────────────────────────────────────────┘
A day’s files must share a prefix that the query can pin. Hive partitioning, one
dt=YYYY-MM-DD/ directory per day, fits this naturally and is what the examples here use. More
generally, three properties of the object keys make the pruning work:
A date appears as a fixed, literal path segment, and it is the first thing that varies. Hive
events/dt=2026-07-17/part-0.parquet, plain events/2026/07/17/..., and a
events/2026-07-17-*.parquet filename prefix all qualify: the date sits at a known position with
nothing variable before it. What matters is that a string like events/dt=2026-07-17/ is a genuine
prefix of exactly that day’s keys (recall that $source_file_name is the key relative to the
bucket, so the prefix includes the leading path). If another partition comes first, such as
events/region=us/dt=2026-07-17/, a date alone is not a leading prefix: pin the earlier partitions
too (one prefix per region and date) or the listing is not pruned.
New files arrive under a recent date. The window lists recent date partitions, so a new file
must land in one of them. Files written into old partitions after the fact are not seen by a
windowed run; load them with a one-time backfill.
Add a prefix window to the same statement. Here it is today and yesterday, written with
CURRENT_DATE so the statement stays fixed. Two days is enough for any job that runs at least once a
day; the second day absorbs runs that straddle midnight and short listing delays.
COPY INTO events (id, val, source_file_name $source_file_name, source_file_timestamp $source_file_timestamp)FROM 's3://my_bucket/events/'WITH TYPE = PARQUET PATTERN = '*.parquet' AUTO_CREATE = FALSEWHERE ( $source_file_name LIKE ('events/dt=' || CURRENT_DATE :: TEXT || '/%') OR $source_file_name LIKE ('events/dt=' || (CURRENT_DATE - 1) :: TEXT || '/%') ) AND NOT EXISTS ( SELECT 1 FROM events e WHERE e.source_file_name = $source_file_name AND ( e.source_file_name LIKE ('events/dt=' || CURRENT_DATE :: TEXT || '/%') OR e.source_file_name LIKE ('events/dt=' || (CURRENT_DATE - 1) :: TEXT || '/%') ));
The date prefixes limit the listing to those partitions, so each run lists only recent files. The
NOT EXISTS subquery uses the same prefixes, so the dedup covers every file a run can list while
reading only those partitions (one row per file, from the events_files index). The no-overlap and
empty-run rules from the first section apply here too.
Firebolt restricts the listing automatically when a filter pins a literal prefix of
$source_file_name (LIKE 'prefix%', =, or IN (...)); an OR of prefixes lists each one. Two
conditions must hold:
The prefix must be a constant known when the query is planned. Literals, CURRENT_DATE and
arithmetic on it, and query parameters all qualify, so they restrict the listing.
The prefix must not contain LIKE wildcards._ and % are wildcards, and only the text
before the first one restricts the listing. Hive date paths are wildcard-free; if a path segment
contains an underscore, escape it, for example LIKE 'my\_events/dt=2026-07-17/%'.
Express the window as prefixes: an OR of one LIKE prefix per day, which is the form the listing
prunes on. A range bound such as $source_file_name >= 'events/dt=...' returns the same rows, but a
range is not a prefix, so use the per-day prefixes.
Run EXPLAIN (physical) on the statement and find the list_objects(...) entry for the scan. Its
mandatory_prefixes argument is the set of prefixes Firebolt will actually list:
Those entries mean only the two day-prefixes are listed. If instead mandatory_prefixes is an empty
list [] (or none), the filter was not turned into a prefix and the whole path is listed: check
that the prefix is a plan-time constant, is free of LIKE wildcards, and is not a range. The same
plan also shows the deduplication anti-join reading the events_files aggregating index rather than
scanning the table.
Resume from the last loaded file, for irregular schedules
The fixed CURRENT_DATE window works as long as the job runs often enough that the window always
covers the time since the previous run. If it can pause for longer than the window, for example
during an outage or on an infrequent schedule, a fixed look-back skips the days between where it
stopped and the current window. When that is possible, anchor the window to the newest file already
loaded rather than to the wall clock:
Read the high-water mark: SELECT MAX(source_file_timestamp) FROM events (served by the events_files index, so
it does not scan the table).
In the scheduler, expand it into the list of dates from that day (minus a small margin) through
today.
Run the same COPY, supplying those dates in both the listing and dedup LIKE prefixes as
query parameters.
This is the one place source_file_timestamp drives the window, so it assumes last-modified is close to the
partition date; widen the margin in step 2 if they differ. Exactly-once still does not depend on it,
since the dedup uses the same prefixes as the listing.Step 3 uses parameters, not a subquery, on purpose. The prefix has to be a constant at planning time
to prune the listing (see How the pruning works). A bound parameter is one;
a prefix computed inline from a subquery, such as LIKE (SELECT MAX(source_file_timestamp) ... FROM events), is not,
so it would return the right rows but list the whole prefix. Folding a subquery-derived prefix into
the listing is a planned improvement.
The data movement is entirely SQL; the automation around it is small and belongs in a scheduler such
as cron or Apache Airflow. Run the COPY FROM on a timer, allow only one run at a time, and treat the
“No file found” error as zero new files. With the CURRENT_DATE window the statement never changes;
the resume-from-watermark variant adds one step before the COPY to read MAX(source_file_timestamp) and bind the
derived date prefixes as parameters.
COPY FROM for the full syntax, including
metadata filtering in the WHERE clause.
Load data using SQL for an alternative
external-table-and-merge workflow that also updates changed rows.
Was this page helpful?
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"Firebolt Documentation","description":"Firebolt is a high-performance cloud data warehouse optimized for sub-second analytics at scale. This documentation covers SQL references, architecture, integrations, security, and operational guides for developers and data engineers.","colors":{"primary":"#f72931","light":"#f72931","dark":"#f72931"},"logo":{"light":"https://mintcdn.com/firebolt/jsk4YOKkUxncWQJD/assets/images/firebolt_logo_website.svg?fit=max\u0026auto=format\u0026n=jsk4YOKkUxncWQJD\u0026q=85\u0026s=e40a8826a260bed647edd25c7cf669c7","dark":"https://mintcdn.com/firebolt/aMFgmUp8e_qNBRJf/assets/images/firebolt_logo_website_dark.svg?fit=max\u0026auto=format\u0026n=aMFgmUp8e_qNBRJf\u0026q=85\u0026s=33353ecce6603bdfbe18c4f4dc9bddba","href":"https://docs.firebolt.io"},"favicon":"https://mintcdn.com/firebolt/k_vuGw9KG_-t9B3w/assets/mintlify/firebolt-favicon.png?fit=max\u0026auto=format\u0026n=k_vuGw9KG_-t9B3w\u0026q=85\u0026s=a5cc2984121196c9ed86f718fa3531c2","appearance":{"default":"system"},"background":{"color":{"light":"#fbfbf8","dark":"#0a0a0a"}},"navbar":{"primary":{"type":"button","label":"Sign Up","href":"https://go.firebolt.io/signup"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/firebolt","facebook":"https://www.facebook.com/firebolthq","youtube":"https://www.youtube.com/channel/UCR94oA7VkFpsriGzwkpYbAA","instagram":"https://www.instagram.com/firebolt_hq","x":"https://twitter.com/FireboltHQ"}},"fonts":{"family":"JetBrains Mono","format":"woff2"},"icons":{"library":"lucide"},"styling":{"codeblocks":{"theme":{"light":"css-variables","dark":"css-variables"}},"latex":false},"integrations":{"gtm":{"tagId":"GTM-WQS7M2G"}},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"firebolt","hasAudioNarration":false,"actualSubdomain":"firebolt","customDomains":["docs.firebolt.io"],"gitSource":{"type":"github","owner":"firebolt-analytics","repo":"packdb","deployBranch":"master","contentDirectory":"docs/docs-mdx","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae378ad9d8677ad95a143a5","collectionId":"d4e89840-219d-4288-9fbf-55cb89eafd20","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae378ad9d8677ad95a143a5"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae378ad9d8677ad95a143a5","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"SQL reference","count":423},{"language":"default","tag":"SQL functions","count":258},{"language":"default","tag":"SQL commands","count":94},{"language":"default","tag":"Guides","count":78},{"language":"default","tag":"Self-Managed","count":55},{"language":"default","tag":"Managed service","count":43},{"language":"default","tag":"Numeric functions","count":41},{"language":"default","tag":"Data definition","count":40},{"language":"default","tag":"String functions","count":37},{"language":"default","tag":"Information schema","count":35}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"googleFontsInlined":true},"customCss":[{"filePath":"assets/mintlify/css/_overrides.css","content":":root{--rounded-3xl:0px;--rounded-2xl:0px;--rounded-xl:0px;--rounded-lg:0px;--rounded-md:0px;--rounded:0px;--rounded-sm:0px;--rounded-search:0px}div:has(#content-container){max-width:100%}div#navbar>div{max-width:100%}.mx-auto.max-w-5xl{max-width:none!important}.code-block,.code-group{--mint-color-text:#111110;--mint-token-parameter:#111110;--mint-token-comment:#7d7b72;--mint-token-punctuation:#4d4a44;--mint-token-keyword:#f72931;--mint-token-constant:#1f5aa8;--mint-token-function:#1f5aa8;--mint-token-string:#1a7a46;--mint-token-string-expression:#1a7a46}.dark .code-block,.dark .code-group{--mint-color-text:#ededed;--mint-token-parameter:#ededed;--mint-token-comment:#9c9a91;--mint-token-punctuation:#dbdad6;--mint-token-keyword:#f72931;--mint-token-constant:#4fa2ff;--mint-token-function:#4fa2ff;--mint-token-string:#27b96b;--mint-token-string-expression:#27b96b}.\\[\\\u0026_mark\\]\\:text-green-700 mark,.text-green-700{color:rgb(var(--primary))!important}.code-block,.code-group{background-color:transparent}header#navbar{border-bottom:1px solid rgb(var(--gray-200)/.7)}.nav-tabs .bg-primary{display:none}#sidebar-content{border:0}#table-of-contents-layout{padding:0}.dark div[class*=bg-white][class*=\"0.03\"],div[class*=bg-gray-950]{background-color:transparent!important;border-bottom-color:transparent!important}div#navbar div[class*=rounded-2xl][class*=pointer-events-auto]{border-color:transparent!important}.max-w-5xl>div[class*=max-w-][class*=\"28rem\"]{max-width:16rem!important}h2.header-home{padding-top:20px;padding-bottom:20px;font-size:24px}ul.list-home{margin-left:0;margin-top:15px;margin-bottom:15px;list-style-type:none;font-size:16px}ul.list-home a::after{content:\" >\"}.list-home li{margin-bottom:10px}#mobile-nav li>a>div:first-child,nav[aria-label=Pages] li>a>div:first-child{margin-left:18px}:is(div.code-block, .code-group) pre.shiki code,:is(div.code-block, .code-group) pre.shiki code .line,:is(div.code-block, .code-group) pre.shiki code .line span{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace!important;font-variant-ligatures:none;font-feature-settings:normal;white-space:pre!important;word-break:normal!important;overflow-wrap:normal!important}:is(div.code-block, .code-group) pre.shiki code{white-space:normal!important}:is(div.code-block, .code-group) pre.shiki code .line{display:block;line-height:1.5;margin:0;padding:0}:is(div.code-block, .code-group) pre.shiki code .line:empty{min-height:1.5em}:is(div.code-block, .code-group) pre.shiki code .line:empty:last-child{min-height:0}:is(div.code-block, .code-group) .code-block-wrap pre.shiki code .line span,:is(div.code-block, .code-group).code-block-wrap pre.shiki code .line span{white-space:pre!important;word-break:normal!important;overflow-wrap:normal!important}.ascii-diagram div.code-block pre.shiki code .line{line-height:1!important}.feature-tag{display:inline-block;padding:.1em .5em;font-size:.75em;font-weight:600;letter-spacing:.02em;line-height:1.4;vertical-align:middle;white-space:nowrap;color:#4d4a44;background-color:rgba(0,0,0,.05);border:1px solid rgba(0,0,0,.1)}.dark .feature-tag{color:#dbdad6;background-color:rgba(255,255,255,.08);border-color:rgba(255,255,255,.12)}"},{"filePath":"assets/mintlify/css/query-window.css","content":".query-window{background-color:#fff;border:1px solid #e1e4e8;margin:1.5rem 0}.dark .query-window{background-color:#000}.query-window>div,.query-window>div.flex{margin:0;padding:0}.query-window,.query-window>div.query-toolbar{font-size:inherit;overflow-wrap:break-word;line-height:1.6;box-sizing:border-box}.query-window>div.query-toolbar{margin-top:0;padding:12px 16px;border-bottom:1px solid #e1e4e8;display:flex;justify-content:space-between;align-items:center}.query-window .run-button,.query-window .window-title{overflow-wrap:break-word;line-height:1.6;box-sizing:border-box;font-size:.95em;font-weight:500}.query-window .run-button{font-family:inherit;font-size:100%;line-height:1.15;margin:0;overflow:visible;text-transform:none;appearance:button;background:#ff0820;color:#fff;border:0;padding:6px 16px;border-radius:4px;cursor:pointer;transition:background .2s ease}.query-window .run-button:disabled{background:#a9a9a9;cursor:not-allowed}.query-window>code{overflow-wrap:break-word;box-sizing:border-box;font-family:monospace;margin:16px;padding:8px;display:block;line-height:1.5;cursor:text;border-radius:0;outline:0;border:1px solid #e1e4e8;background:#55555511;white-space:pre-wrap}.query-window>code:focus,.query-window>code:hover{border-color:rgb(var(--primary))}.query-window .code-block{border-radius:0;border:0;border-bottom:1px solid #e1e4e8;margin:0;padding:16px}.query-window .code-block div{border-radius:0;border:0;margin:0;padding:0}.query-window>code.firebolt-sql{-webkit-user-modify:read-write;-webkit-line-break:after-white-space;transition:background-color .2s ease;font-family:var(--mono-font)}.query-window .server-unavailable-banner{overflow-wrap:break-word;box-sizing:border-box;background-color:#fff8e6;border:1px solid #ffd666;border-radius:4px;color:#664d03;padding:12px;margin:8px 16px;font-family:var(--body-font);font-size:14px;line-height:1.5;display:flex;align-items:center}.query-window .server-unavailable-banner::before{content:\"⚠️\";margin-right:8px;font-size:16px}.query-window-hidden{display:none!important}.query-window table{display:table;border-collapse:collapse;font-family:monospace;width:auto}.query-window table td,.query-window table th{overflow-wrap:break-word;line-height:1.6;border-collapse:collapse;box-sizing:border-box;min-width:7.5rem;border-left:0;padding:16px;text-align:left;border-bottom:1px solid #e1e4e8}.query-window table th{border-top:1px solid #e1e4e8}.query-window table thead th{font-weight:600;position:sticky;top:0;z-index:1}.query-window table thead th span{display:inline-block;margin-left:4px;font-weight:400;color:#aaa;line-height:1.3}.query-window .error-message,.query-window table,.query-window>p{overflow-wrap:break-word;line-height:1.6;box-sizing:border-box}.query-window>p{margin:0;font-size:.8em;color:#666;padding:8px 16px}.query-window>p span{display:inline-block;margin-right:16px}.query-window .error-message{font-size:inherit;border:1px solid #fde8e8;border-radius:4px;color:#9b1c1c;padding:12px}.query-window .error-description{overflow-wrap:break-word;color:#9b1c1c;box-sizing:border-box;margin-top:0;font-family:'SF Mono','Roboto Mono',Consolas,monospace;font-size:14px;line-height:1.5}"}],"page":{"pagePath":"guides/loading-data/incremental-ingestion-from-s3","slug":"/guides/loading-data/incremental-ingestion-from-s3","pageMetadata":{"description":"Load every file from an Amazon S3 path into Firebolt exactly once, including files that arrive later, and keep each run cheap as the bucket grows.","keywords":["incremental load","exactly once","COPY FROM","source_file_name","source_file_timestamp","hive partition"],"sidebarTitle":"Incremental loading from Amazon S3","title":"Incremental loading from Amazon S3","href":"/guides/loading-data/incremental-ingestion-from-s3"},"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: \"Load every file from an Amazon S3 path into Firebolt exactly once, including files that arrive later, and keep each run cheap as the bucket grows.\"\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`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A scheduled job watches an Amazon S3 prefix that grows over time and loads each new file into a\nFirebolt table `,_jsx(_components.strong,{children:`exactly once`}),`: none missed, none loaded twice. The first section is the simplest\nversion and works for any file layout; it lists the whole prefix on every run, which is fine until\nthe bucket grows large. The second section keeps each run cheap by listing only recent files, which\nrequires the files to be laid out by date.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`This pattern identifies each file by its name, so treat files as immutable: write every object once\nand never modify or overwrite it. A file overwritten after it has been loaded is `,_jsx(_components.strong,{children:`not`}),` re-ingested\n(its name is already recorded), so its new contents are silently missed.`]})}),`\n`,_jsxs(_components.p,{children:[`This guide uses `,_jsx(_components.code,{children:`COPY FROM`}),`, which loads CSV, TSV, and Parquet. The same metadata columns and listing\npruning also apply when files are read through an external table or a `,_jsx(_components.code,{children:`read_*`}),` table-valued function\n(`,_jsx(_components.code,{children:`read_parquet`}),`, `,_jsx(_components.code,{children:`read_csv`}),`, `,_jsx(_components.code,{children:`read_json`}),`), so the windowing carries over to those readers; JSON, for\nexample, is read that way rather than with `,_jsx(_components.code,{children:`COPY FROM`}),`. The pattern relies on two per-file metadata\ncolumns that Firebolt populates for every external file (the leading `,_jsx(_components.code,{children:`$`}),` marks a metadata virtual\ncolumn; for the full list, see `,_jsx(_components.strong,{children:`Using metadata virtual columns`}),` in\n`,_jsx(_components.a,{href:`/guides/loading-data/working-with-external-tables`,children:`Work with external tables`}),`):`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Column`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Type`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Role`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`$source_file_name`})}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`TEXT`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`The object key without the bucket. A stable unique id per file: it is the deduplication key, and the value you filter on to restrict which keys are listed.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`$source_file_timestamp`})}),_jsx(_components.td,{style:{textAlign:`left`},children:_jsx(_components.code,{children:`TIMESTAMPTZ`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`The object’s last-modified time.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`load-new-files-exactly-once`,children:`Load new files exactly once`}),`\n`,_jsx(_components.p,{children:`Record the identity of the file each row came from, so later runs can tell what is already loaded.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`CREATE`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` TABLE`}),_jsx(_components.span,{style:{color:`var(--mint-token-function, #0068d6)`,\"--shiki-dark\":`var(--mint-token-function, #0068d6)`},children:` events`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` (`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-token-comment, #666666)`,\"--shiki-dark\":`var(--mint-token-comment, #666666)`},children:` -- data columns, replace these with your actual schema`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` id `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`INTEGER`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` val `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`TEXT`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-token-comment, #666666)`,\"--shiki-dark\":`var(--mint-token-comment, #666666)`},children:` -- bookkeeping`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` source_file_name `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`TEXT`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` NOT NULL`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`, `}),_jsx(_components.span,{style:{color:`var(--mint-token-comment, #666666)`,\"--shiki-dark\":`var(--mint-token-comment, #666666)`},children:`-- from $source_file_name (unique per file)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` source_file_timestamp `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`TIMESTAMPTZ`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` NOT NULL`}),_jsx(_components.span,{style:{color:`var(--mint-token-comment, #666666)`,\"--shiki-dark\":`var(--mint-token-comment, #666666)`},children:` -- from $source_file_timestamp`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`);`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`A file contributes many rows, all sharing the same `,_jsx(_components.code,{children:`source_file_name`}),` and `,_jsx(_components.code,{children:`source_file_timestamp`}),`, so an aggregating index\ngrouped by those two columns holds one entry per file. The `,_jsx(_components.code,{children:`NOT EXISTS`}),` check then reads one row per\nfile from the index, so it needs no explicit `,_jsx(_components.code,{children:`DISTINCT`}),` and never scans the base table:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`CREATE`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` AGGREGATING `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`INDEX`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` events_files `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`ON`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` events (source_file_timestamp, source_file_name);`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Each run issues the same `,_jsx(_components.code,{children:`COPY FROM`}),`, keyed on the file name:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`COPY`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` INTO`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` events (id, val, source_file_name $source_file_name, source_file_timestamp $source_file_timestamp)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`FROM`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` 's3://my_bucket/events/'`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`WITH`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` TYPE`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` =`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` PARQUET`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` PATTERN `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`=`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` '*.parquet'`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` AUTO_CREATE `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`=`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` FALSE`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`WHERE`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` NOT`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` EXISTS`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` (`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`SELECT`}),_jsx(_components.span,{style:{color:`var(--mint-token-constant, #171717)`,\"--shiki-dark\":`var(--mint-token-constant, #171717)`},children:` 1`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` FROM`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` events e `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`WHERE`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` e.source_file_name `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`=`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` $source_file_name);`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`$source_file_name`}),` is the object key, a unique id for a file. The `,_jsx(_components.code,{children:`NOT EXISTS`}),` clause skips any file\nalready in the table, so a repeated or retried run never duplicates a row, and every new file is\npicked up on the next run. Two rules make this reliable:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Do not let two runs overlap.`}),` Each run reads the set of already-loaded files before it inserts,\nso two runs at once would both see a new file as absent and load it twice (`,_jsx(_components.code,{children:`COPY`}),` inserts rows and\nenforces no unique constraint on `,_jsx(_components.code,{children:`source_file_name`}),`). Serialize the job to at most one run in flight, for\nexample with a scheduler concurrency limit of one or an external lock.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`“No new files” is reported as an error.`}),` When the `,_jsx(_components.code,{children:`WHERE`}),` clause matches nothing, `,_jsx(_components.code,{children:`COPY FROM`}),`\nreturns `,_jsx(_components.code,{children:`No file found at URL: ... Check url, object pattern, and condition in WHERE clause.`}),` Treat\nthis as a successful no-op meaning zero new files.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`To load history that predates the job, run this same statement once as a backfill.`}),`\n`,_jsxs(_components.p,{children:[`This version lists every object under `,_jsx(_components.code,{children:`events/`}),` on each run. That is fine for a modest bucket. Once\nthe history grows large, the next section removes that cost.`]}),`\n`,_jsx(Heading,{level:`2`,id:`scale-to-large-buckets-by-pruning-the-listing`,children:`Scale to large buckets by pruning the listing`}),`\n`,_jsxs(_components.p,{children:[`Listing the whole prefix costs work proportional to the number of files, so a job that runs forever\ndoes work proportional to n squared over its lifetime. S3 listing is a real cost factor: each\n`,_jsx(_components.code,{children:`ListObjects`}),` request is billed and returns object keys in sorted (lexicographic) order, and the only\nserver-side filter it accepts is a common key prefix. So the one way to list less is to restrict the\nobject name to a prefix, which works when the files you want share a leading one.`]}),`\n`,_jsx(`div`,{className:`ascii-diagram`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`┌────────────────────────────────────────────────┐`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ scheduler: run the same COPY every few minutes │`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`└───────────────────────┬────────────────────────┘`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ▼`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`┌────────────────────────────────────────────────┐`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ COPY INTO events ... WHERE │`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ $source_file_name LIKE 'events/dt=\u003cday>/%' │ ▶ list only recent prefixes in S3`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ AND NOT EXISTS (row already loaded) │ ▶ drop already-loaded files`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`└───────────────────────┬────────────────────────┘`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ▼`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`┌────────────────────────────────────────────────┐`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`│ rows for new files only, inserted once │`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`└────────────────────────────────────────────────┘`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})}),`\n`,_jsx(Heading,{level:`3`,id:`what-the-layout-must-provide`,children:`What the layout must provide`}),`\n`,_jsxs(_components.p,{children:[`A day’s files must share a prefix that the query can pin. `,_jsx(_components.strong,{children:`Hive partitioning`}),`, one\n`,_jsx(_components.code,{children:`dt=YYYY-MM-DD/`}),` directory per day, fits this naturally and is what the examples here use. More\ngenerally, three properties of the object keys make the pruning work:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A date appears as a fixed, literal path segment, and it is the first thing that varies.`}),` Hive\n`,_jsx(_components.code,{children:`events/dt=2026-07-17/part-0.parquet`}),`, plain `,_jsx(_components.code,{children:`events/2026/07/17/...`}),`, and a\n`,_jsx(_components.code,{children:`events/2026-07-17-*.parquet`}),` filename prefix all qualify: the date sits at a known position with\nnothing variable before it. What matters is that a string like `,_jsx(_components.code,{children:`events/dt=2026-07-17/`}),` is a genuine\nprefix of exactly that day’s keys (recall that `,_jsx(_components.code,{children:`$source_file_name`}),` is the key relative to the\nbucket, so the prefix includes the leading path). If another partition comes first, such as\n`,_jsx(_components.code,{children:`events/region=us/dt=2026-07-17/`}),`, a date alone is not a leading prefix: pin the earlier partitions\ntoo (one prefix per region and date) or the listing is not pruned.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`New files arrive under a recent date.`}),` The window lists recent date partitions, so a new file\nmust land in one of them. Files written into old partitions after the fact are not seen by a\nwindowed run; load them with a one-time backfill.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`the-windowed-load-statement`,children:`The windowed load statement`}),`\n`,_jsxs(_components.p,{children:[`Add a prefix window to the same statement. Here it is today and yesterday, written with\n`,_jsx(_components.code,{children:`CURRENT_DATE`}),` so the statement stays fixed. Two days is enough for any job that runs at least once a\nday; the second day absorbs runs that straddle midnight and short listing delays.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`COPY`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` INTO`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` events (id, val, source_file_name $source_file_name, source_file_timestamp $source_file_timestamp)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`FROM`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` 's3://my_bucket/events/'`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`WITH`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` TYPE`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` =`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` PARQUET`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` PATTERN `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`=`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` '*.parquet'`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` AUTO_CREATE `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`=`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` FALSE`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`WHERE`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` ( $source_file_name `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`LIKE`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` (`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:`'events/dt='`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` ||`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` CURRENT_DATE :: `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`TEXT`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` ||`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` '/%'`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` OR`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` $source_file_name `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`LIKE`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` (`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:`'events/dt='`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` ||`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` (CURRENT_DATE `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`-`}),_jsx(_components.span,{style:{color:`var(--mint-token-constant, #171717)`,\"--shiki-dark\":`var(--mint-token-constant, #171717)`},children:` 1`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`) :: `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`TEXT`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` ||`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` '/%'`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`) )`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` AND`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` NOT`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` EXISTS`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` SELECT`}),_jsx(_components.span,{style:{color:`var(--mint-token-constant, #171717)`,\"--shiki-dark\":`var(--mint-token-constant, #171717)`},children:` 1`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` FROM`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` events e`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` WHERE`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` e.source_file_name `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`=`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` $source_file_name`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` AND`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` ( e.source_file_name `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`LIKE`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` (`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:`'events/dt='`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` ||`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` CURRENT_DATE :: `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`TEXT`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` ||`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` '/%'`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` OR`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` e.source_file_name `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`LIKE`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` (`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:`'events/dt='`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` ||`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` (CURRENT_DATE `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`-`}),_jsx(_components.span,{style:{color:`var(--mint-token-constant, #171717)`,\"--shiki-dark\":`var(--mint-token-constant, #171717)`},children:` 1`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`) :: `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`TEXT`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` ||`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` '/%'`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`) ));`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The date prefixes limit the listing to those partitions, so each run lists only recent files. The\n`,_jsx(_components.code,{children:`NOT EXISTS`}),` subquery uses the same prefixes, so the dedup covers every file a run can list while\nreading only those partitions (one row per file, from the `,_jsx(_components.code,{children:`events_files`}),` index). The no-overlap and\nempty-run rules from the first section apply here too.`]}),`\n`,_jsx(Heading,{level:`3`,id:`how-the-pruning-works`,children:`How the pruning works`}),`\n`,_jsxs(_components.p,{children:[`Firebolt restricts the listing automatically when a filter pins a literal prefix of\n`,_jsx(_components.code,{children:`$source_file_name`}),` (`,_jsx(_components.code,{children:`LIKE 'prefix%'`}),`, `,_jsx(_components.code,{children:`=`}),`, or `,_jsx(_components.code,{children:`IN (...)`}),`); an `,_jsx(_components.code,{children:`OR`}),` of prefixes lists each one. Two\nconditions must hold:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The prefix must be a constant known when the query is planned.`}),` Literals, `,_jsx(_components.code,{children:`CURRENT_DATE`}),` and\narithmetic on it, and query parameters all qualify, so they restrict the listing.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`The prefix must not contain `,_jsx(_components.code,{children:`LIKE`}),` wildcards.`]}),` `,_jsx(_components.code,{children:`_`}),` and `,_jsx(_components.code,{children:`%`}),` are wildcards, and only the text\nbefore the first one restricts the listing. Hive date paths are wildcard-free; if a path segment\ncontains an underscore, escape it, for example `,_jsx(_components.code,{children:`LIKE 'my\\\\_events/dt=2026-07-17/%'`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Express the window as prefixes: an `,_jsx(_components.code,{children:`OR`}),` of one `,_jsx(_components.code,{children:`LIKE`}),` prefix per day, which is the form the listing\nprunes on. A range bound such as `,_jsx(_components.code,{children:`$source_file_name >= 'events/dt=...'`}),` returns the same rows, but a\nrange is not a prefix, so use the per-day prefixes.`]}),`\n`,_jsx(Heading,{level:`3`,id:`confirm-it-from-the-query-plan`,children:`Confirm it from the query plan`}),`\n`,_jsxs(_components.p,{children:[`Run `,_jsx(_components.code,{children:`EXPLAIN (physical)`}),` on the statement and find the `,_jsx(_components.code,{children:`list_objects(...)`}),` entry for the scan. Its\n`,_jsx(_components.code,{children:`mandatory_prefixes`}),` argument is the set of prefixes Firebolt will actually list:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`$0 = list_objects(url => 's3://my_bucket/events/', pattern => '*.parquet',`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` mandatory_prefixes => ['events/dt=2026-07-17/', 'events/dt=2026-07-16/'])`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Those entries mean only the two day-prefixes are listed. If instead `,_jsx(_components.code,{children:`mandatory_prefixes`}),` is an empty\nlist `,_jsx(_components.code,{children:`[]`}),` (or `,_jsx(_components.code,{children:`none`}),`), the filter was not turned into a prefix and the whole path is listed: check\nthat the prefix is a plan-time constant, is free of `,_jsx(_components.code,{children:`LIKE`}),` wildcards, and is not a range. The same\nplan also shows the deduplication anti-join reading the `,_jsx(_components.code,{children:`events_files`}),` aggregating index rather than\nscanning the table.`]}),`\n`,_jsx(Heading,{level:`3`,id:`resume-from-the-last-loaded-file-for-irregular-schedules`,children:`Resume from the last loaded file, for irregular schedules`}),`\n`,_jsxs(_components.p,{children:[`The fixed `,_jsx(_components.code,{children:`CURRENT_DATE`}),` window works as long as the job runs often enough that the window always\ncovers the time since the previous run. If it can pause for longer than the window, for example\nduring an outage or on an infrequent schedule, a fixed look-back skips the days between where it\nstopped and the current window. When that is possible, anchor the window to the newest file already\nloaded rather than to the wall clock:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Read the high-water mark: `,_jsx(_components.code,{children:`SELECT MAX(source_file_timestamp) FROM events`}),` (served by the `,_jsx(_components.code,{children:`events_files`}),` index, so\nit does not scan the table).`]}),`\n`,_jsx(_components.li,{children:`In the scheduler, expand it into the list of dates from that day (minus a small margin) through\ntoday.`}),`\n`,_jsxs(_components.li,{children:[`Run the same `,_jsx(_components.code,{children:`COPY`}),`, supplying those dates in `,_jsx(_components.strong,{children:`both`}),` the listing and dedup `,_jsx(_components.code,{children:`LIKE`}),` prefixes as\n`,_jsx(_components.strong,{children:`query parameters`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`This is the one place `,_jsx(_components.code,{children:`source_file_timestamp`}),` drives the window, so it assumes last-modified is close to the\npartition date; widen the margin in step 2 if they differ. Exactly-once still does not depend on it,\nsince the dedup uses the same prefixes as the listing.`]}),`\n`,_jsxs(_components.p,{children:[`Step 3 uses parameters, not a subquery, on purpose. The prefix has to be a constant at planning time\nto prune the listing (see `,_jsx(_components.a,{href:`#how-the-pruning-works`,children:`How the pruning works`}),`). A bound parameter is one;\na prefix computed inline from a subquery, such as `,_jsx(_components.code,{children:`LIKE (SELECT MAX(source_file_timestamp) ... FROM events)`}),`, is not,\nso it would return the right rows but list the whole prefix. Folding a subquery-derived prefix into\nthe listing is a planned improvement.`]}),`\n`,_jsx(Heading,{level:`2`,id:`automate-it`,children:`Automate it`}),`\n`,_jsxs(_components.p,{children:[`The data movement is entirely SQL; the automation around it is small and belongs in a scheduler such\nas cron or Apache Airflow. Run the `,_jsx(_components.code,{children:`COPY FROM`}),` on a timer, allow only one run at a time, and treat the\n“No file found” error as zero new files. With the `,_jsx(_components.code,{children:`CURRENT_DATE`}),` window the statement never changes;\nthe resume-from-watermark variant adds one step before the `,_jsx(_components.code,{children:`COPY`}),` to read `,_jsx(_components.code,{children:`MAX(source_file_timestamp)`}),` and bind the\nderived date prefixes as parameters.`]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/loading-data/working-with-external-tables`,children:`Work with external tables`}),` for the full list of\nmetadata virtual columns.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/reference-sql/commands/data-management/copy-from`,children:`COPY FROM`}),` for the full syntax, including\nmetadata filtering in the `,_jsx(_components.code,{children:`WHERE`}),` clause.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/loading-data/loading-data-sql`,children:`Load data using SQL`}),` for an alternative\nexternal-table-and-merge workflow that also updates changed rows.`]}),`\n`]})]})}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":{"codeStyling":{"theme":{"light":"css-variables","dark":"css-variables"}},"config":{},"pageMetadata":{"description":"Load every file from an Amazon S3 path into Firebolt exactly once, including files that arrive later, and keep each run cheap as the bucket grows.","keywords":["incremental load","exactly once","COPY FROM","source_file_name","source_file_timestamp","hive partition"],"sidebarTitle":"Incremental loading from Amazon S3","title":"Incremental loading from Amazon S3","href":"/guides/loading-data/incremental-ingestion-from-s3"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Load new files exactly once","slug":"load-new-files-exactly-once","depth":2,"children":[]},{"title":"Scale to large buckets by pruning the listing","slug":"scale-to-large-buckets-by-pruning-the-listing","depth":2,"children":[{"title":"What the layout must provide","slug":"what-the-layout-must-provide","depth":3,"children":[]},{"title":"The windowed load statement","slug":"the-windowed-load-statement","depth":3,"children":[]},{"title":"How the pruning works","slug":"how-the-pruning-works","depth":3,"children":[]},{"title":"Confirm it from the query plan","slug":"confirm-it-from-the-query-plan","depth":3,"children":[]},{"title":"Resume from the last loaded file, for irregular schedules","slug":"resume-from-the-last-loaded-file-for-irregular-schedules","depth":3,"children":[]}]},{"title":"Automate it","slug":"automate-it","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/firebolt/e61fecbf3feb7bae/assets/js/query-window.js","/_mintlify/custom/firebolt/402e14b37ca25610/scarf-pixel.js"],"subdomain":"firebolt","siteName":"Firebolt Documentation","title":"Incremental loading from Amazon S3 - Firebolt Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-20T08:07:28.693Z","originalFileLocation":"guides/loading-data/incremental-ingestion-from-s3.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=\"Load every file from an Amazon S3 path into Firebolt exactly once, including files that arrive later, and keep each run cheap as the bucket grows.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Firebolt Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/firebolt/Xvo2TFRZ7sI7wJzt/_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/firebolt/Xvo2TFRZ7sI7wJzt/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/firebolt/Xvo2TFRZ7sI7wJzt/_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/firebolt/Xvo2TFRZ7sI7wJzt/_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/firebolt/Xvo2TFRZ7sI7wJzt/_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/firebolt/Xvo2TFRZ7sI7wJzt/_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/firebolt/Xvo2TFRZ7sI7wJzt/_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/firebolt/Xvo2TFRZ7sI7wJzt/_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/firebolt/Xvo2TFRZ7sI7wJzt/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Incremental loading from Amazon S3 - Firebolt Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Load every file from an Amazon S3 path into Firebolt exactly once, including files that arrive later, and keep each run cheap as the bucket grows.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Firebolt Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://firebolt.mintlify.app/_mintlify/api/og/v2?division=Load+data\u0026amp;title=Incremental+loading+from+Amazon+S3\u0026amp;description=Load+every+file+from+an+Amazon+S3+path+into+Firebolt+exactly+once%2C+including+files+that+arrive+later%2C+and+keep+each+run+cheap+as+the+bucket+grows.\u0026amp;theme=8a81ffa540781fcdca668931\u0026amp;signature=a3e8ee81b56d1963511cbf6edafaad203be0d7f00c3603f4d4d565cdec0a2939\">\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=\"Incremental loading from Amazon S3 - Firebolt Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Load every file from an Amazon S3 path into Firebolt exactly once, including files that arrive later, and keep each run cheap as the bucket grows.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://firebolt.mintlify.app/_mintlify/api/og/v2?division=Load+data\u0026amp;title=Incremental+loading+from+Amazon+S3\u0026amp;description=Load+every+file+from+an+Amazon+S3+path+into+Firebolt+exactly+once%2C+including+files+that+arrive+later%2C+and+keep+each+run+cheap+as+the+bucket+grows.\u0026amp;theme=8a81ffa540781fcdca668931\u0026amp;signature=a3e8ee81b56d1963511cbf6edafaad203be0d7f00c3603f4d4d565cdec0a2939\">\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/firebolt/Xvo2TFRZ7sI7wJzt/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Firebolt Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#f72931\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/loading-data/incremental-ingestion-from-s3.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.firebolt.io/#organization\",\"name\":\"Firebolt Documentation\",\"url\":\"https://docs.firebolt.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/firebolt/jsk4YOKkUxncWQJD/assets/images/firebolt_logo_website.svg?fit=max\u0026auto=format\u0026n=jsk4YOKkUxncWQJD\u0026q=85\u0026s=e40a8826a260bed647edd25c7cf669c7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.firebolt.io#website\",\"name\":\"Firebolt Documentation\",\"url\":\"https://docs.firebolt.io\",\"publisher\":{\"@id\":\"https://docs.firebolt.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3#webpage\",\"url\":\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3\",\"name\":\"Incremental loading from Amazon S3\",\"description\":\"Load every file from an Amazon S3 path into Firebolt exactly once, including files that arrive later, and keep each run cheap as the bucket grows.\",\"dateModified\":\"2026-07-20T08:07:28.693Z\",\"isPartOf\":{\"@id\":\"https://docs.firebolt.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.firebolt.io/guides/managing-your-organization\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Load data\",\"item\":\"https://docs.firebolt.io/guides/loading-data\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Incremental loading from Amazon S3\",\"item\":\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3#article\",\"headline\":\"Incremental loading from Amazon S3\",\"name\":\"Incremental loading from Amazon S3\",\"description\":\"Load every file from an Amazon S3 path into Firebolt exactly once, including files that arrive later, and keep each run cheap as the bucket grows.\",\"url\":\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3\",\"mainEntityOfPage\":{\"@id\":\"https://docs.firebolt.io/guides/loading-data/incremental-ingestion-from-s3#webpage\"},\"dateModified\":\"2026-07-20T08:07:28.693Z\",\"keywords\":\"incremental load, exactly once, COPY FROM, source_file_name, source_file_timestamp, hive partition\",\"publisher\":{\"@id\":\"https://docs.firebolt.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.firebolt.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Firebolt Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Firebolt Documentation","nav":{"global":null,"groups":[{"group":"Overview","pages":[{"title":"What is Firebolt?","sidebarTitle":"What is Firebolt?","href":"/overview"},{"title":"Quickstart","sidebarTitle":"Quickstart","href":"/overview/quickstart"},{"sidebarTitle":"Architecture","title":"Architecture","href":"/overview/architecture-overview"},{"sidebarTitle":"Core concepts","title":"Core concepts","href":"/overview/data-management"}]},{"group":"Performance and Observability","pages":[{"sidebarTitle":"Overview","title":"Overview","href":"/performance-and-observability"},{"group":"Query Planning","pages":[{"sidebarTitle":"Overview","title":"Query Planning","href":"/performance-and-observability/query-planning"},{"sidebarTitle":"Inspecting query plans","title":"Inspecting query plans","href":"/performance-and-observability/query-planning/inspecting-query-plans"},{"sidebarTitle":"Cardinality estimation","title":"Cardinality estimation","href":"/performance-and-observability/query-planning/cardinality-estimation"},{"group":"Automated Column Statistics","pages":[{"sidebarTitle":"Overview","title":"Automated Column Statistics (ACS)","href":"/performance-and-observability/query-planning/automated-column-statistics"},{"sidebarTitle":"Create tables with column statistics","title":"Create tables with column statistics","href":"/performance-and-observability/query-planning/automated-column-statistics/table-with-statistics"},{"sidebarTitle":"Infer from user created indexes","title":"Infer from user created indexes","href":"/performance-and-observability/query-planning/automated-column-statistics/user-created-indexes"}]},{"sidebarTitle":"History-based statistics","title":"History-Based Statistics","href":"/performance-and-observability/query-planning/history-based-statistics"},{"sidebarTitle":"UNIQUE constraints as query hints","title":"UNIQUE constraints as query hints","href":"/performance-and-observability/query-planning/unique-constraint"},{"group":"Query Hints","pages":[{"sidebarTitle":"Overview","title":"Query hints","href":"/performance-and-observability/query-planning/query-hints"},{"sidebarTitle":"No partial aggregation","title":"No partial aggregation","href":"/performance-and-observability/query-planning/query-hints/no-partial-aggregation"},{"sidebarTitle":"No join ordering","title":"No join ordering","href":"/performance-and-observability/query-planning/query-hints/no-join-ordering"},{"sidebarTitle":"Optimize for single row window partitions","title":"Optimize for single row window partitions","href":"/performance-and-observability/query-planning/query-hints/optimize-for-single-row-window-partitions"},{"sidebarTitle":"Unique columns","title":"Unique columns","href":"/performance-and-observability/query-planning/query-hints/unique-columns"}]},{"sidebarTitle":"User-guided mode","title":"User-guided mode","href":"/performance-and-observability/query-planning/user-guided-mode"},{"sidebarTitle":"Late materialization","title":"Late materialization","href":"/performance-and-observability/query-planning/late-materialization"},{"sidebarTitle":"Join pruning","title":"Join pruning","href":"/performance-and-observability/query-planning/join-pruning"}]},{"group":"Runtime","pages":[{"sidebarTitle":"Subresult reuse and result caching","title":"Subresult reuse and result caching","href":"/performance-and-observability/runtime/understand-query-performance-subresult"},{"sidebarTitle":"Spilling","title":"Spilling","href":"/performance-and-observability/runtime/understand-spilling"},{"sidebarTitle":"Iceberg performance","title":"Iceberg performance","href":"/performance-and-observability/runtime/iceberg-performance"}]},{"group":"Storage and Indexing","pages":[{"sidebarTitle":"Overview","title":"Storage and indexing","href":"/performance-and-observability/storage-and-indexing"},{"sidebarTitle":"Primary index","title":"Primary index","href":"/performance-and-observability/storage-and-indexing/primary-index"},{"sidebarTitle":"Data skipping index","title":"Data skipping index","href":"/performance-and-observability/storage-and-indexing/data-skipping-index"},{"sidebarTitle":"Inverted index","title":"Inverted index","href":"/performance-and-observability/storage-and-indexing/inverted-index"},{"sidebarTitle":"Full-text search index","title":"Full-text search index","href":"/performance-and-observability/storage-and-indexing/full-text-search-index"},{"sidebarTitle":"Aggregating index","title":"Aggregating index","href":"/performance-and-observability/storage-and-indexing/aggregating-index"},{"sidebarTitle":"Vector search index","title":"Vector search index","href":"/performance-and-observability/storage-and-indexing/vector-search-index"},{"sidebarTitle":"Table and Column Compression","title":"Table and Column Compression","href":"/performance-and-observability/storage-and-indexing/table-and-column-compression"}]}]},{"group":"Security","pages":[{"sidebarTitle":"Overview","title":"Security","href":"/security"},{"group":"Role-Based Access Control","pages":[{"sidebarTitle":"Overview","title":"Role-Based Access Control","href":"/security/rbac"},{"group":"Database permissions","pages":[{"sidebarTitle":"Overview","title":"Database permissions","href":"/security/rbac/database-permissions"},{"sidebarTitle":"Schema permissions","title":"Schema permissions","href":"/security/rbac/database-permissions/schema-permissions"},{"sidebarTitle":"Table permissions","title":"Table permissions","href":"/security/rbac/database-permissions/table-permissions"},{"sidebarTitle":"View permissions","title":"View permissions","href":"/security/rbac/database-permissions/view-permissions"}]},{"sidebarTitle":"Location Permissions","title":"Location Permissions","href":"/security/rbac/location-permissions"},{"sidebarTitle":"Role Permissions","title":"Role Permissions","href":"/security/rbac/role-permissions"},{"sidebarTitle":"Account Permissions","title":"Account Permissions","href":"/security/rbac/account-permissions"},{"sidebarTitle":"User Permissions","title":"User Permissions","href":"/security/rbac/user-permissions"},{"sidebarTitle":"Engine Permissions","title":"Engine Permissions","href":"/security/rbac/engine-permissions"},{"sidebarTitle":"Ownership","title":"Ownership","href":"/security/rbac/ownership"},{"sidebarTitle":"Check Assigned Privileges","title":"Check Assigned Privileges","href":"/security/rbac/check-privileges"},{"group":"Role Management","pages":[{"sidebarTitle":"Overview","title":"Role Management","href":"/security/rbac/role-management"},{"sidebarTitle":"Default System Roles","title":"Default System Roles","href":"/security/rbac/role-management/system-roles"},{"sidebarTitle":"Custom Roles","title":"Custom Roles","href":"/security/rbac/role-management/custom-roles"}]}]},{"group":"Guides","pages":[{"sidebarTitle":"Role-based access control (RBAC)","title":"Role-based access control (RBAC)","href":"/security/guides/rbac"},{"sidebarTitle":"Column-level security","title":"Column-level security","href":"/security/guides/column-level-security"},{"sidebarTitle":"Secure views","title":"Using secure views","href":"/security/guides/rbac-views-security"},{"sidebarTitle":"LOCATION objects","title":"LOCATION objects","href":"/security/guides/location"},{"sidebarTitle":"Ownership","title":"Ownership","href":"/security/guides/ownership"}]}]},{"group":"Self-Managed","pages":[{"title":"Self-Managed","sidebarTitle":"Overview","href":"/self-managed"},{"group":"Firebolt Operator","pages":[{"title":"Installation","sidebarTitle":"Installation","href":"/self-managed/firebolt-operator/installation"},{"title":"Quickstart","sidebarTitle":"Quickstart","href":"/self-managed/firebolt-operator/quickstart"},{"title":"kubectl firebolt plugin","sidebarTitle":"kubectl plugin","href":"/self-managed/firebolt-operator/kubectl-plugin"},{"title":"Architecture","sidebarTitle":"Architecture","href":"/self-managed/firebolt-operator/architecture"},{"group":"Instance","pages":[{"title":"Instance overview","sidebarTitle":"Overview","href":"/self-managed/firebolt-operator/instance/overview"},{"group":"Gateway","pages":[{"title":"Gateway overview","sidebarTitle":"Overview","href":"/self-managed/firebolt-operator/instance/gateway/overview"},{"title":"Gateway query routing","sidebarTitle":"Gateway query routing","href":"/self-managed/firebolt-operator/instance/gateway/gateway-query-routing"},{"title":"Gateway sizing","sidebarTitle":"Gateway sizing","href":"/self-managed/firebolt-operator/instance/gateway/gateway-sizing"}]},{"group":"Metadata","pages":[{"title":"Metadata overview","sidebarTitle":"Overview","href":"/self-managed/firebolt-operator/instance/metadata/overview"}]}]},{"group":"Engine","pages":[{"title":"Engine overview","sidebarTitle":"Overview","href":"/self-managed/firebolt-operator/engine/overview"},{"title":"Engine rollouts","sidebarTitle":"Engine rollouts","href":"/self-managed/firebolt-operator/engine/engine-rollouts"},{"title":"Auto-stop and wake-up","sidebarTitle":"Auto-stop and wake-up","href":"/self-managed/firebolt-operator/engine/auto-stop-and-wake-up"},{"title":"Engine scaling","sidebarTitle":"Engine scaling","href":"/self-managed/firebolt-operator/engine/engine-scaling"},{"group":"Object storage","pages":[{"title":"Amazon S3","sidebarTitle":"Amazon S3","href":"/self-managed/firebolt-operator/engine/object-storage/amazon-s3"},{"title":"S3-compatible storage","sidebarTitle":"S3-compatible","href":"/self-managed/firebolt-operator/engine/object-storage/s3-compatible"},{"title":"Google Cloud Storage","sidebarTitle":"Google Cloud Storage","href":"/self-managed/firebolt-operator/engine/object-storage/google-cloud-storage"},{"title":"Azure Blob Storage","sidebarTitle":"Azure Blob Storage","href":"/self-managed/firebolt-operator/engine/object-storage/azure-blob-storage"}]}]},{"group":"EngineClass","pages":[{"title":"FireboltEngineClass overview","sidebarTitle":"Overview","href":"/self-managed/firebolt-operator/engineclass/overview"},{"title":"EngineClass configuration inheritance","sidebarTitle":"Configuration inheritance","href":"/self-managed/firebolt-operator/engineclass/configuration-inheritance"}]},{"group":"EnginePreset","pages":[{"title":"FireboltEnginePreset overview","sidebarTitle":"Overview","href":"/self-managed/firebolt-operator/enginepreset/overview"}]},{"title":"Monitoring","sidebarTitle":"Monitoring","href":"/self-managed/firebolt-operator/monitoring"},{"title":"Security model","sidebarTitle":"Security","href":"/self-managed/firebolt-operator/security"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","href":"/self-managed/firebolt-operator/troubleshooting"},{"group":"CRD reference","pages":[{"title":"FireboltInstance CRD reference","sidebarTitle":"FireboltInstance CRD reference","href":"/self-managed/firebolt-operator/crd-reference/instance-crd-reference"},{"title":"FireboltEngine CRD reference","sidebarTitle":"FireboltEngine CRD reference","href":"/self-managed/firebolt-operator/crd-reference/engine-crd-reference"},{"title":"FireboltEngineClass CRD reference","sidebarTitle":"FireboltEngineClass CRD reference","href":"/self-managed/firebolt-operator/crd-reference/fireboltengineclass-crd-reference"},{"title":"ClusterFireboltEngineClass CRD reference","sidebarTitle":"ClusterFireboltEngineClass CRD reference","href":"/self-managed/firebolt-operator/crd-reference/clusterfireboltengineclass-crd-reference"},{"title":"FireboltEnginePreset CRD reference","sidebarTitle":"FireboltEnginePreset CRD reference","href":"/self-managed/firebolt-operator/crd-reference/fireboltenginepreset-crd-reference"}]}]},{"group":"Helm Chart","pages":[{"sidebarTitle":"Overview","title":"Firebolt instance Helm chart","href":"/self-managed/helm-chart/overview"},{"sidebarTitle":"Prerequisites","title":"Prerequisites","href":"/self-managed/helm-chart/prerequisites"},{"sidebarTitle":"Quickstart","title":"Quickstart","href":"/self-managed/helm-chart/quickstart"},{"group":"Usage","pages":[{"sidebarTitle":"Single engine","title":"Single engine","href":"/self-managed/helm-chart/usage/single-engine"},{"sidebarTitle":"Multi-engine","title":"Multi-engine","href":"/self-managed/helm-chart/usage/multi-engine"},{"group":"Object Storage","pages":[{"sidebarTitle":"Amazon S3","title":"Amazon S3","href":"/self-managed/helm-chart/usage/object-storage/amazon-s3"},{"title":"S3-compatible storage","sidebarTitle":"S3-compatible","href":"/self-managed/helm-chart/usage/object-storage/s3-compatible"},{"sidebarTitle":"Google Cloud Storage","title":"Google Cloud Storage","href":"/self-managed/helm-chart/usage/object-storage/google-cloud-storage"},{"sidebarTitle":"Azure Blob Storage","title":"Azure Blob Storage","href":"/self-managed/helm-chart/usage/object-storage/azure-blob-storage"}]},{"sidebarTitle":"External PostgreSQL","title":"External PostgreSQL","href":"/self-managed/helm-chart/usage/external-postgres"},{"sidebarTitle":"Authentication","title":"Authentication","href":"/self-managed/helm-chart/usage/authentication"},{"sidebarTitle":"TLS","title":"TLS","href":"/self-managed/helm-chart/usage/tls"},{"sidebarTitle":"Image overrides","title":"Image overrides","href":"/self-managed/helm-chart/usage/image-overrides"}]},{"sidebarTitle":"Operator upgrade path","title":"Operator upgrade path","href":"/self-managed/helm-chart/operator-upgrade-path"},{"sidebarTitle":"Monitoring","title":"Monitoring","href":"/self-managed/helm-chart/monitoring"},{"sidebarTitle":"Security","title":"Security model","href":"/self-managed/helm-chart/security"},{"sidebarTitle":"Troubleshooting","title":"Troubleshooting","href":"/self-managed/helm-chart/troubleshooting"}]},{"group":"Standalone Binaries","pages":[{"title":"Run Firebolt from the standalone binaries","sidebarTitle":"Overview","href":"/self-managed/standalone-binaries/overview"},{"title":"Deploy with embedded metadata","sidebarTitle":"Embedded metadata","href":"/self-managed/standalone-binaries/embedded-metadata"},{"title":"Deploy with standalone metadata","sidebarTitle":"Standalone metadata","href":"/self-managed/standalone-binaries/standalone-metadata"},{"title":"Colocate multiple nodes on one host","sidebarTitle":"Colocate on one host","href":"/self-managed/standalone-binaries/colocation"}]},{"title":"Connecting over HTTP","sidebarTitle":"Connect over HTTP","href":"/self-managed/connecting-over-http"},{"title":"Engine arguments","sidebarTitle":"Engine arguments","href":"/self-managed/engine-arguments"},{"sidebarTitle":"Engine configuration","title":"Engine configuration reference","href":"/self-managed/engine-configuration"},{"sidebarTitle":"Structured logging","title":"Structured logging","href":"/self-managed/structured-logging"},{"title":"Web UI","sidebarTitle":"Web UI","href":"/self-managed/web-ui"}]},{"group":"Managed service","pages":[{"sidebarTitle":"Organizations and accounts","title":"Organizations and accounts","href":"/managed-service/organizations-accounts"},{"sidebarTitle":"Engine fundamentals","title":"Engine Fundamentals","href":"/managed-service/engine-fundamentals"},{"sidebarTitle":"Engine Consumption","title":"Engine Consumption","href":"/managed-service/engine-consumption"},{"sidebarTitle":"Pricing and billing","title":"Pricing and billing","href":"/managed-service/billing"},{"sidebarTitle":"Available regions","title":"Available regions","href":"/managed-service/available-regions"},{"sidebarTitle":"Support","title":"Support","href":"/managed-service/support"},{"group":"Security","pages":[{"group":"Configure SSO","pages":[{"sidebarTitle":"Overview","title":"Configure SSO","href":"/managed-service/security/sso"},{"sidebarTitle":"Auth0","title":"Auth0","href":"/managed-service/security/sso/auth0"},{"sidebarTitle":"Okta","title":"Okta","href":"/managed-service/security/sso/okta"},{"sidebarTitle":"OneLogin","title":"OneLogin","href":"/managed-service/security/sso/onelogin"},{"sidebarTitle":"PingFederate","title":"PingFederate","href":"/managed-service/security/sso/pingfederate"},{"sidebarTitle":"Salesforce","title":"Salesforce","href":"/managed-service/security/sso/salesforce"},{"sidebarTitle":"Custom Identity Provider","title":"Custom Identity Provider","href":"/managed-service/security/sso/custom-sso"}]},{"sidebarTitle":"Multi-factor authentication","title":"Multi-factor authentication","href":"/managed-service/security/enabling-mfa"},{"sidebarTitle":"Network policies","title":"Network policies","href":"/managed-service/security/network-policies"},{"sidebarTitle":"AWS PrivateLink","title":"AWS PrivateLink","href":"/managed-service/security/privatelink"}]},{"group":"Operate Engines","pages":[{"sidebarTitle":"Governing Engines","title":"Governing Engines","href":"/managed-service/operate-engines/rbac-for-engines"},{"sidebarTitle":"Work with engines","title":"Work with engines","href":"/managed-service/operate-engines/working-with-engines-using-ddl"},{"sidebarTitle":"Sizing Engines","title":"Sizing Engines","href":"/managed-service/operate-engines/sizing-engines"},{"sidebarTitle":"Understanding Autoscaling","title":"Understanding Autoscaling","href":"/managed-service/operate-engines/understand-autoscaling"},{"sidebarTitle":"Warming Up Engines","title":"Warming Up Engines","href":"/managed-service/operate-engines/warming-up-engines"},{"sidebarTitle":"Release settings","title":"Release settings","href":"/managed-service/operate-engines/engines-release-settings"},{"sidebarTitle":"System Engine","title":"System Engine","href":"/managed-service/operate-engines/system-engine"},{"sidebarTitle":"Engine Warmpools","title":"Engine Warmpools","href":"/managed-service/operate-engines/engine-warmpools"}]},{"group":"Manage organization objects","pages":[{"sidebarTitle":"Manage logins","title":"Manage logins","href":"/managed-service/organization/managing-logins"},{"sidebarTitle":"Manage programmatic access","title":"Manage programmatic access","href":"/managed-service/organization/service-accounts"},{"group":"SQL commands","pages":[{"sidebarTitle":"CREATE LOGIN","title":"CREATE LOGIN","href":"/managed-service/organization/commands/create-login"},{"sidebarTitle":"ALTER LOGIN","title":"ALTER LOGIN","href":"/managed-service/organization/commands/alter-login"},{"sidebarTitle":"DROP LOGIN","title":"DROP LOGIN","href":"/managed-service/organization/commands/drop-login"},{"sidebarTitle":"CREATE SERVICE ACCOUNT","title":"CREATE SERVICE ACCOUNT","href":"/managed-service/organization/commands/create-service-account"},{"sidebarTitle":"ALTER SERVICE ACCOUNT","title":"ALTER SERVICE ACCOUNT","href":"/managed-service/organization/commands/alter-service-account"},{"sidebarTitle":"DROP SERVICE ACCOUNT","title":"DROP SERVICE ACCOUNT","href":"/managed-service/organization/commands/drop-service-account"},{"sidebarTitle":"CREATE ORGANIZATION ROLE","title":"CREATE ORGANIZATION ROLE","href":"/managed-service/organization/commands/create-organization-role"},{"sidebarTitle":"ALTER ORGANIZATION ROLE","title":"ALTER ORGANIZATION ROLE","href":"/managed-service/organization/commands/alter-organization-role"},{"sidebarTitle":"DROP ORGANIZATION ROLE","title":"DROP ORGANIZATION ROLE","href":"/managed-service/organization/commands/drop-organization-role"},{"sidebarTitle":"GRANT ORGANIZATION ROLE","title":"GRANT ORGANIZATION ROLE","href":"/managed-service/organization/commands/grant-organization-role"},{"sidebarTitle":"REVOKE ORGANIZATION ROLE","title":"REVOKE ORGANIZATION ROLE","href":"/managed-service/organization/commands/revoke-organization-role"},{"sidebarTitle":"ALTER ORGANIZATION","title":"ALTER ORGANIZATION","href":"/managed-service/organization/commands/alter-organization"}]},{"group":"Information schema","pages":[{"sidebarTitle":"Accounts","title":"Accounts","href":"/managed-service/organization/information-schema/accounts"},{"sidebarTitle":"Logins","title":"Logins","href":"/managed-service/organization/information-schema/logins"},{"sidebarTitle":"Organization","title":"Organization","href":"/managed-service/organization/information-schema/organization"},{"sidebarTitle":"Service accounts","title":"Service accounts","href":"/managed-service/organization/information-schema/service-accounts"},{"sidebarTitle":"Network policies","title":"Network policies","href":"/managed-service/organization/information-schema/network_policies"}]}]}]},{"group":"Guides","pages":[{"group":"Manage organization","pages":[{"sidebarTitle":"Overview","title":"Manage organization","href":"/guides/managing-your-organization"},{"sidebarTitle":"Register to Firebolt","title":"Register to Firebolt","href":"/guides/managing-your-organization/creating-an-organization"},{"sidebarTitle":"Manage accounts","title":"Manage accounts","href":"/guides/managing-your-organization/managing-accounts"},{"sidebarTitle":"Manage users and roles","title":"Manage users and roles","href":"/guides/managing-your-organization/managing-users"},{"sidebarTitle":"Billing","title":"Billing","href":"/guides/managing-your-organization/billing"}]},{"group":"SQL Dialect","pages":[{"sidebarTitle":"Arrays","title":"Arrays","href":"/guides/sql-dialect/arrays"},{"sidebarTitle":"Collations","title":"Collations","href":"/guides/sql-dialect/collations"},{"sidebarTitle":"SQL Pipe syntax","title":"SQL Pipe syntax","href":"/guides/sql-dialect/sql-pipe-syntax"},{"sidebarTitle":"Parametrized queries","title":"Parametrized queries","href":"/guides/sql-dialect/parametrized-queries"}]},{"group":"Load data","pages":[{"sidebarTitle":"Overview","title":"Load data","href":"/guides/loading-data"},{"sidebarTitle":"Load data using a wizard","title":"Load data using a wizard","href":"/guides/loading-data/loading-data-wizard"},{"sidebarTitle":"Load data using SQL","title":"Load data using SQL","href":"/guides/loading-data/loading-data-sql"},{"sidebarTitle":"Creating Access Key and Secret ID in AWS","title":"Creating Access Key and Secret ID in AWS","href":"/guides/loading-data/creating-access-keys-aws"},{"sidebarTitle":"Use AWS roles to access S3","title":"Use AWS roles to access S3","href":"/guides/loading-data/configuring-aws-role-to-access-amazon-s3"},{"description":"Understand the role of external tables when loading data into Firebolt, and learn how to configure them to connect to your data lake.","sidebarTitle":"Work with external tables","title":"Work with external tables","href":"/guides/loading-data/working-with-external-tables"},{"sidebarTitle":"Incremental loading from Amazon S3","title":"Incremental loading from Amazon S3","href":"/guides/loading-data/incremental-ingestion-from-s3"},{"group":"Work with semi-structured data","pages":[{"description":"Learn how to handle semi-structured data in Firebolt.","sidebarTitle":"Overview","title":"Work with semi-structured data","href":"/guides/loading-data/working-with-semi-structured-data"},{"sidebarTitle":"Load semi-structured JSON data","title":"Load semi-structured JSON data","href":"/guides/loading-data/working-with-semi-structured-data/load-json-data"},{"sidebarTitle":"Load semi-structured Parquet data","title":"Load semi-structured Parquet data","href":"/guides/loading-data/working-with-semi-structured-data/load-parquet-data"}]}]},{"group":"Change Data Capture","pages":[{"sidebarTitle":"Overview","title":"Change data capture","href":"/guides/change-data-capture"},{"sidebarTitle":"Postgres CDC","title":"Postgres CDC","href":"/guides/change-data-capture/postgres"},{"sidebarTitle":"MongoDB CDC","title":"MongoDB CDC","href":"/guides/change-data-capture/mongodb"},{"sidebarTitle":"CDC tables","title":"CDC tables","href":"/guides/change-data-capture/cdc-tables"}]},{"sidebarTitle":"Export data","title":"Export data","href":"/guides/exporting-data"},{"group":"Iceberg and data lake","pages":[{"sidebarTitle":"Iceberg","title":"Iceberg","href":"/guides/iceberg-and-data-lake/iceberg"},{"sidebarTitle":"DuckLake","title":"Query DuckLake tables with Firebolt","href":"/guides/iceberg-and-data-lake/ducklake"}]},{"group":"AI and Machine Learning","pages":[{"title":"Firebolt Agent","sidebarTitle":"Firebolt Agent","href":"/guides/ai/firebolt-agent"},{"sidebarTitle":"Getting started with AI","title":"Getting started with AI","href":"/guides/ai/getting-started-with-ai"},{"sidebarTitle":"Use AWS roles to access Bedrock","title":"Use AWS roles to access Bedrock","href":"/guides/ai/use-aws-roles-to-access-bedrock"}]},{"group":"Develop with Firebolt","pages":[{"sidebarTitle":"REST API","title":"REST API","href":"/guides/developing-with-firebolt/using-the-api"},{"sidebarTitle":"Node.js","title":"Node.js","href":"/guides/developing-with-firebolt/connecting-with-nodejs"},{"sidebarTitle":"Python","title":"Python","href":"/guides/developing-with-firebolt/connecting-with-python"},{"sidebarTitle":"JDBC","title":"JDBC","href":"/guides/developing-with-firebolt/connecting-with-jdbc"},{"sidebarTitle":"SQLAlchemy","title":"SQLAlchemy","href":"/guides/developing-with-firebolt/connecting-with-sqlalchemy"},{"sidebarTitle":".NET SDK","title":".NET SDK","href":"/guides/developing-with-firebolt/connecting-with-net-sdk"},{"sidebarTitle":"Go","title":"Go","href":"/guides/developing-with-firebolt/connecting-with-go"},{"sidebarTitle":"Rust","title":"Rust","href":"/guides/developing-with-firebolt/connecting-with-rust"},{"sidebarTitle":"Parametrized queries","title":"Parametrized queries","href":"/guides/developing-with-firebolt/parametrized-queries"}]},{"group":"Integrate with Firebolt","pages":[{"sidebarTitle":"Overview","title":"Integrate with Firebolt","href":"/guides/integrations"},{"sidebarTitle":"Airbyte","title":"Airbyte","href":"/guides/integrations/airbyte"},{"sidebarTitle":"Airflow","title":"Airflow","href":"/guides/integrations/airflow"},{"sidebarTitle":"Apache Superset","title":"Apache Superset","href":"/guides/integrations/connecting-to-apache-superset"},{"sidebarTitle":"DataBrain","title":"DataBrain","href":"/guides/integrations/connecting-to-databrain"},{"sidebarTitle":"AWS Glue","title":"AWS Glue","href":"/guides/integrations/aws-glue"},{"sidebarTitle":"AWS QuickSight","title":"AWS QuickSight","href":"/guides/integrations/quicksight"},{"sidebarTitle":"Cube.js","title":"Cube.js","href":"/guides/integrations/cube-js"},{"sidebarTitle":"DBeaver","title":"DBeaver","href":"/guides/integrations/dbeaver"},{"sidebarTitle":"dbt - Firebolt adapter","title":"dbt - Firebolt adapter","href":"/guides/integrations/dbt-firebolt-adaptor"},{"sidebarTitle":"dbt - PostgreSQL adapter (cloud and core)","title":"dbt - PostgreSQL adapter (cloud and core)","href":"/guides/integrations/dbt-postgres-adaptor"},{"sidebarTitle":"Dot","title":"Dot","href":"/guides/integrations/dot"},{"sidebarTitle":"Embeddable","title":"Embeddable","href":"/guides/integrations/embeddable"},{"sidebarTitle":"Estuary","title":"Estuary","href":"/guides/integrations/estuary"},{"sidebarTitle":"Hex","title":"Hex","href":"/guides/integrations/hex"},{"sidebarTitle":"Kafka Sink Connector","title":"Kafka Sink Connector","href":"/guides/integrations/kafka-sink-connector"},{"sidebarTitle":"LangChain","title":"LangChain","href":"/guides/integrations/langchain"},{"sidebarTitle":"Lightdash","title":"Lightdash","href":"/guides/integrations/lightdash"},{"sidebarTitle":"Looker Cloud","title":"Looker Cloud","href":"/guides/integrations/looker-cloud"},{"sidebarTitle":"Looker On-Prem","title":"Looker On-Prem","href":"/guides/integrations/looker-on-prem"},{"sidebarTitle":"MCP Server","title":"MCP Server","href":"/guides/integrations/mcp"},{"sidebarTitle":"Metabase Cloud","title":"Metabase Cloud","href":"/guides/integrations/metabase-cloud"},{"sidebarTitle":"Metabase On Prem","title":"Metabase On Prem","href":"/guides/integrations/metabase-on-prem"},{"sidebarTitle":"OpenTelemetry Exporter","title":"OpenTelemetry Exporter","href":"/guides/integrations/otel-exporter"},{"sidebarTitle":"Omni","title":"Omni","href":"/guides/integrations/omni"},{"sidebarTitle":"Pandas","title":"Pandas","href":"/guides/integrations/pandas"},{"sidebarTitle":"Paradime","title":"Paradime","href":"/guides/integrations/connecting-to-paradime"},{"title":"Power BI","sidebarTitle":"Power BI","href":"/guides/integrations/power-bi"},{"sidebarTitle":"Preset","title":"Preset","href":"/guides/integrations/connecting-to-preset"},{"sidebarTitle":"Tableau","title":"Tableau","href":"/guides/integrations/tableau"},{"sidebarTitle":"TextQL","title":"TextQL","href":"/guides/integrations/textql"},{"sidebarTitle":"ThoughtSpot","title":"ThoughtSpot","href":"/guides/integrations/thoughtspot"},{"sidebarTitle":"Wirekite","title":"Wirekite","href":"/guides/integrations/wirekite"}]},{"group":"Migrate to Firebolt","pages":[{"sidebarTitle":"Overview","title":"Migrate to Firebolt","href":"/guides/migration-guides"},{"sidebarTitle":"Migrate from Amazon Redshift","title":"Migrate from Amazon Redshift","href":"/guides/migration-guides/redshift"}]}]},{"group":"SQL reference","pages":[{"title":"SQL reference","sidebarTitle":"Overview","href":"/reference-sql"},{"group":"Lexical structure","pages":[{"sidebarTitle":"Overview","title":"Lexical structure","href":"/reference-sql/lexical-structure"},{"sidebarTitle":"Object identifiers","title":"Object identifiers","href":"/reference-sql/lexical-structure/object-identifiers"},{"sidebarTitle":"Reserved words","title":"Reserved words","href":"/reference-sql/lexical-structure/reserved-words"},{"sidebarTitle":"Operators","title":"Operators","href":"/reference-sql/lexical-structure/operators"},{"sidebarTitle":"ANY/ALL (array)","title":"ANY/ALL (array)","href":"/reference-sql/lexical-structure/any-all-array"},{"sidebarTitle":"ANY/ALL (subquery)","title":"ANY/ALL (subquery)","href":"/reference-sql/lexical-structure/any-all-subquery"}]},{"sidebarTitle":"Explicit Transactions","title":"Explicit Transactions","href":"/reference-sql/explicit-transactions"},{"group":"Data types","pages":[{"sidebarTitle":"All data types","title":"Data types","href":"/reference-sql/data-types"},{"sidebarTitle":"BYTEA","title":"BYTEA data type","href":"/reference-sql/data-types/bytea"},{"sidebarTitle":"DATE","title":"DATE data type","href":"/reference-sql/data-types/date"},{"sidebarTitle":"GEOGRAPHY","title":"GEOGRAPHY data type","href":"/reference-sql/data-types/geography"},{"sidebarTitle":"JSON","title":"JSON Data Type","href":"/reference-sql/data-types/json"},{"sidebarTitle":"NUMERIC","title":"NUMERIC data type","href":"/reference-sql/data-types/numeric"},{"sidebarTitle":"STRUCT","title":"STRUCT data type","href":"/reference-sql/data-types/struct"},{"sidebarTitle":"TIMESTAMP","title":"TIMESTAMP data type","href":"/reference-sql/data-types/timestampntz"},{"sidebarTitle":"TIMESTAMPTZ","title":"TIMESTAMPTZ data type","href":"/reference-sql/data-types/timestamptz"}]},{"group":"Information schema","pages":[{"sidebarTitle":"Overview","title":"Information Schema","href":"/reference-sql/information-schema"},{"sidebarTitle":"Account info","title":"Account info","href":"/reference-sql/information-schema/account_info"},{"sidebarTitle":"Applicable roles","title":"Applicable roles","href":"/reference-sql/information-schema/applicable-roles"},{"sidebarTitle":"Catalogs","title":"Catalogs","href":"/reference-sql/information-schema/catalogs"},{"sidebarTitle":"Columns","title":"Columns","href":"/reference-sql/information-schema/columns"},{"sidebarTitle":"Enabled roles","title":"Enabled roles","href":"/reference-sql/information-schema/enabled-roles"},{"sidebarTitle":"Engine history","title":"Engine history","href":"/reference-sql/information-schema/engine-history"},{"sidebarTitle":"Engine metering history","title":"Engine metering history","href":"/reference-sql/information-schema/engine-metering-history"},{"sidebarTitle":"Engine metrics history","title":"Engine metrics history","href":"/reference-sql/information-schema/engine-metrics-history"},{"sidebarTitle":"Engine caches","title":"Engine caches","href":"/reference-sql/information-schema/engine-caches"},{"sidebarTitle":"Engine query history","title":"Engine query history","href":"/reference-sql/information-schema/engine-query-history"},{"sidebarTitle":"Engine running queries","title":"Engine running queries","href":"/reference-sql/information-schema/engine-running-queries"},{"sidebarTitle":"Engine user query history","title":"Engine user query history","href":"/reference-sql/information-schema/engine-user-query-history"},{"sidebarTitle":"Engines","title":"Engines","href":"/reference-sql/information-schema/engines"},{"sidebarTitle":"Indexes","title":"Indexes","href":"/reference-sql/information-schema/indexes"},{"sidebarTitle":"Locations","title":"Locations","href":"/reference-sql/information-schema/locations"},{"title":"Object default privileges","href":"/reference-sql/information-schema/object-default-privileges"},{"sidebarTitle":"Object privileges","title":"Object privileges","href":"/reference-sql/information-schema/object-privileges"},{"sidebarTitle":"pg_settings","title":"pg_settings","href":"/reference-sql/information-schema/pg_settings"},{"sidebarTitle":"Quotas","title":"Quotas","href":"/reference-sql/information-schema/quotas"},{"sidebarTitle":"Routines","title":"Routines","href":"/reference-sql/information-schema/routines"},{"sidebarTitle":"CDC ingests","title":"CDC ingests","href":"/reference-sql/information-schema/cdc-ingests"},{"sidebarTitle":"Schemata","title":"Schemata","href":"/reference-sql/information-schema/schemata"},{"sidebarTitle":"Settings","title":"Settings","href":"/reference-sql/information-schema/settings"},{"sidebarTitle":"Streams","title":"Streams","href":"/reference-sql/information-schema/streams"},{"sidebarTitle":"Tables","title":"Tables","href":"/reference-sql/information-schema/tables"},{"sidebarTitle":"Transactions","title":"Transactions","href":"/reference-sql/information-schema/transactions"},{"sidebarTitle":"Transitive applicable roles","title":"Transitive applicable roles","href":"/reference-sql/information-schema/transitive-applicable-roles"},{"sidebarTitle":"Users","title":"Users","href":"/reference-sql/information-schema/users"},{"sidebarTitle":"Views","title":"Views","href":"/reference-sql/information-schema/views"}]},{"group":"SQL commands","pages":[{"sidebarTitle":"Overview","title":"SQL commands","href":"/reference-sql/commands"},{"group":"Access control","pages":[{"sidebarTitle":"ALTER DEFAULT PRIVILEGES","title":"ALTER DEFAULT PRIVILEGES","href":"/reference-sql/commands/access-control/alter-default-privileges"},{"sidebarTitle":"ALTER NETWORK POLICY","title":"ALTER NETWORK POLICY","href":"/reference-sql/commands/access-control/alter-network-policy"},{"sidebarTitle":"ALTER ROLE","title":"ALTER ROLE","href":"/reference-sql/commands/access-control/alter-role"},{"sidebarTitle":"ALTER USER","title":"ALTER USER","href":"/reference-sql/commands/access-control/alter-user"},{"sidebarTitle":"CREATE NETWORK POLICY","title":"CREATE NETWORK POLICY","href":"/reference-sql/commands/access-control/create-network-policy"},{"sidebarTitle":"CREATE ROLE","title":"CREATE ROLE","href":"/reference-sql/commands/access-control/create-role"},{"sidebarTitle":"CREATE USER","title":"CREATE USER","href":"/reference-sql/commands/access-control/create-user"},{"sidebarTitle":"DROP NETWORK POLICY","title":"DROP NETWORK POLICY","href":"/reference-sql/commands/access-control/drop-network-policy"},{"sidebarTitle":"DROP ROLE","title":"DROP ROLE","href":"/reference-sql/commands/access-control/drop-role"},{"sidebarTitle":"DROP USER","title":"DROP USER","href":"/reference-sql/commands/access-control/drop-user"},{"sidebarTitle":"GRANT","title":"GRANT","href":"/reference-sql/commands/access-control/grant"},{"sidebarTitle":"REVOKE","title":"REVOKE","href":"/reference-sql/commands/access-control/revoke"}]},{"group":"Data definition","pages":[{"sidebarTitle":"ALTER ACCOUNT","title":"ALTER ACCOUNT","href":"/reference-sql/commands/data-definition/alter-account"},{"sidebarTitle":"ALTER DATABASE","title":"ALTER DATABASE","href":"/reference-sql/commands/data-definition/alter-database"},{"sidebarTitle":"ALTER LOCATION","title":"ALTER LOCATION","href":"/reference-sql/commands/data-definition/alter-location"},{"sidebarTitle":"ALTER SCHEMA","title":"ALTER SCHEMA","href":"/reference-sql/commands/data-definition/alter-schema"},{"sidebarTitle":"ALTER TABLE","title":"ALTER TABLE","href":"/reference-sql/commands/data-definition/alter-table"},{"sidebarTitle":"ALTER VIEW","title":"ALTER VIEW","href":"/reference-sql/commands/data-definition/alter-view"},{"sidebarTitle":"COMMENT ON","title":"COMMENT ON","href":"/reference-sql/commands/data-definition/comment-on"},{"sidebarTitle":"CREATE ACCOUNT","title":"CREATE ACCOUNT","href":"/reference-sql/commands/data-definition/create-account"},{"sidebarTitle":"CREATE AGGREGATING INDEX","title":"CREATE AGGREGATING INDEX","href":"/reference-sql/commands/data-definition/create-aggregating-index"},{"sidebarTitle":"CREATE INDEX","title":"CREATE INDEX","href":"/reference-sql/commands/data-definition/create-index"},{"sidebarTitle":"CREATE VECTOR SEARCH INDEX","title":"CREATE VECTOR SEARCH INDEX","href":"/reference-sql/commands/data-definition/create-vector-search-index"},{"sidebarTitle":"CREATE DATABASE","title":"CREATE DATABASE","href":"/reference-sql/commands/data-definition/create-database"},{"sidebarTitle":"CREATE EXTERNAL TABLE","title":"CREATE EXTERNAL TABLE","href":"/reference-sql/commands/data-definition/create-external-table"},{"sidebarTitle":"CREATE TABLE AS SELECT (CTAS)","title":"CREATE TABLE AS SELECT (CTAS)","href":"/reference-sql/commands/data-definition/create-fact-dimension-table-as-select"},{"sidebarTitle":"CREATE FUNCTION","title":"CREATE FUNCTION","href":"/reference-sql/commands/data-definition/create-function"},{"sidebarTitle":"CREATE TABLE","title":"CREATE TABLE","href":"/reference-sql/commands/data-definition/create-fact-dimension-table"},{"sidebarTitle":"CREATE ICEBERG DATABASE","title":"CREATE ICEBERG DATABASE","href":"/reference-sql/commands/data-definition/create-iceberg-database"},{"sidebarTitle":"CREATE ICEBERG TABLE","title":"CREATE ICEBERG TABLE","href":"/reference-sql/commands/data-definition/create-iceberg-table"},{"sidebarTitle":"CREATE ICEBERG TABLE AS SELECT","title":"CREATE ICEBERG TABLE AS SELECT","href":"/reference-sql/commands/data-definition/create-iceberg-table-as-select"},{"sidebarTitle":"CREATE CDC TABLE","title":"CREATE CDC TABLE","href":"/reference-sql/commands/data-definition/create-cdc-table"},{"sidebarTitle":"CREATE LOCATION (Amazon Bedrock)","title":"CREATE LOCATION (Amazon Bedrock)","href":"/reference-sql/commands/data-definition/create-location-bedrock"},{"sidebarTitle":"CREATE LOCATION (DuckLake)","title":"CREATE LOCATION (DuckLake)","href":"/reference-sql/commands/data-definition/create-location-ducklake"},{"sidebarTitle":"CREATE LOCATION (Iceberg)","title":"CREATE LOCATION (Iceberg)","href":"/reference-sql/commands/data-definition/create-location-iceberg"},{"sidebarTitle":"CREATE LOCATION (MongoDB)","title":"CREATE LOCATION (MongoDB)","href":"/reference-sql/commands/data-definition/create-location-mongodb"},{"sidebarTitle":"CREATE LOCATION (Postgres)","title":"CREATE LOCATION (Postgres)","href":"/reference-sql/commands/data-definition/create-location-postgres"},{"sidebarTitle":"CREATE LOCATION (Amazon S3)","title":"CREATE LOCATION (Amazon S3)","href":"/reference-sql/commands/data-definition/create-location-s3"},{"sidebarTitle":"CREATE LOCATION","title":"CREATE LOCATION","href":"/reference-sql/commands/data-definition/create-location"},{"sidebarTitle":"CREATE SCHEMA","title":"CREATE SCHEMA","href":"/reference-sql/commands/data-definition/create-schema"},{"sidebarTitle":"CREATE STREAM","title":"CREATE STREAM","href":"/reference-sql/commands/data-definition/create-stream"},{"sidebarTitle":"CREATE TABLE CLONE","title":"CREATE TABLE CLONE","href":"/reference-sql/commands/data-definition/create-table-clone"},{"sidebarTitle":"CREATE VIEW","title":"CREATE VIEW","href":"/reference-sql/commands/data-definition/create-view"},{"sidebarTitle":"DROP ACCOUNT","title":"DROP ACCOUNT","href":"/reference-sql/commands/data-definition/drop-account"},{"sidebarTitle":"DROP DATABASE","title":"DROP DATABASE","href":"/reference-sql/commands/data-definition/drop-database"},{"sidebarTitle":"DROP FUNCTION","title":"DROP FUNCTION","href":"/reference-sql/commands/data-definition/drop-function"},{"sidebarTitle":"DROP INDEX","title":"DROP INDEX","href":"/reference-sql/commands/data-definition/drop-index"},{"sidebarTitle":"DROP LOCATION","title":"DROP LOCATION","href":"/reference-sql/commands/data-definition/drop-location"},{"sidebarTitle":"DROP SCHEMA","title":"DROP SCHEMA","href":"/reference-sql/commands/data-definition/drop-schema"},{"sidebarTitle":"DROP TABLE","title":"DROP TABLE","href":"/reference-sql/commands/data-definition/drop-table"},{"sidebarTitle":"DROP VIEW","title":"DROP VIEW","href":"/reference-sql/commands/data-definition/drop-view"},{"sidebarTitle":"USE DATABASE","title":"USE DATABASE","href":"/reference-sql/commands/data-definition/use-database"}]},{"group":"Data management","pages":[{"sidebarTitle":"COPY FROM","title":"COPY FROM","href":"/reference-sql/commands/data-management/copy-from"},{"sidebarTitle":"COPY TO","title":"COPY TO","href":"/reference-sql/commands/data-management/copy-to"},{"sidebarTitle":"DELETE","title":"DELETE","href":"/reference-sql/commands/data-management/delete"},{"sidebarTitle":"INSERT","title":"INSERT","href":"/reference-sql/commands/data-management/insert"},{"sidebarTitle":"MERGE","title":"MERGE","href":"/reference-sql/commands/data-management/merge"},{"sidebarTitle":"TRUNCATE TABLE","title":"TRUNCATE TABLE","href":"/reference-sql/commands/data-management/truncate-table"},{"sidebarTitle":"UPDATE","title":"UPDATE","href":"/reference-sql/commands/data-management/update"},{"sidebarTitle":"VACUUM","title":"VACUUM","href":"/reference-sql/commands/data-management/vacuum"}]},{"group":"Engine commands","pages":[{"sidebarTitle":"Overview","title":"Engine commands","href":"/reference-sql/commands/engines"},{"sidebarTitle":"ALTER ENGINE","title":"ALTER ENGINE","href":"/reference-sql/commands/engines/alter-engine"},{"sidebarTitle":"CREATE ENGINE","title":"CREATE ENGINE","href":"/reference-sql/commands/engines/create-engine"},{"sidebarTitle":"DROP ENGINE","title":"DROP ENGINE","href":"/reference-sql/commands/engines/drop-engine"},{"sidebarTitle":"START ENGINE","title":"START ENGINE","href":"/reference-sql/commands/engines/start-engine"},{"sidebarTitle":"STOP ENGINE","title":"STOP ENGINE","href":"/reference-sql/commands/engines/stop-engine"},{"sidebarTitle":"USE ENGINE","title":"USE ENGINE","href":"/reference-sql/commands/engines/use-engine"},{"sidebarTitle":"CLEAR CACHE","title":"CLEAR CACHE","href":"/reference-sql/commands/engines/clear-cache"}]},{"group":"Querying and query optimization","pages":[{"sidebarTitle":"CANCEL QUERY","title":"CANCEL QUERY","href":"/reference-sql/commands/queries/cancel"},{"sidebarTitle":"EXPLAIN","title":"EXPLAIN","href":"/reference-sql/commands/queries/explain"},{"sidebarTitle":"SELECT","title":"SELECT","href":"/reference-sql/commands/queries/select"},{"sidebarTitle":"Cross-database queries","title":"Cross-database queries","href":"/reference-sql/commands/queries/cross-database-queries"}]},{"group":"Metadata commands","pages":[{"sidebarTitle":"DESCRIBE","title":"DESCRIBE","href":"/reference-sql/commands/metadata/describe"},{"sidebarTitle":"SHOW ALL","title":"SHOW ALL","href":"/reference-sql/commands/metadata/show-all"},{"sidebarTitle":"SHOW CACHE","title":"SHOW CACHE","href":"/reference-sql/commands/metadata/show-cache"},{"sidebarTitle":"SHOW CATALOGS","title":"SHOW CATALOGS","href":"/reference-sql/commands/metadata/show-catalogs"},{"sidebarTitle":"SHOW COLUMNS","title":"SHOW COLUMNS","href":"/reference-sql/commands/metadata/show-columns"},{"sidebarTitle":"SHOW ENGINES","title":"SHOW ENGINES","href":"/reference-sql/commands/metadata/show-engines"},{"sidebarTitle":"SHOW INDEXES","title":"SHOW INDEXES","href":"/reference-sql/commands/metadata/show-indexes"},{"sidebarTitle":"SHOW TABLES","title":"SHOW TABLES","href":"/reference-sql/commands/metadata/show-tables"},{"sidebarTitle":"SHOW VIEWS","title":"SHOW VIEWS","href":"/reference-sql/commands/metadata/show-views"}]}]},{"group":"SQL functions","pages":[{"sidebarTitle":"Overview","title":"SQL functions","href":"/reference-sql/functions-reference"},{"sidebarTitle":"Functions glossary","title":"Functions glossary","href":"/reference-sql/functions-reference/functions-glossary"},{"group":"Aggregate functions","pages":[{"sidebarTitle":"ANY_VALUE","title":"ANY_VALUE","href":"/reference-sql/functions-reference/aggregation/any_value"},{"sidebarTitle":"APPROX_COUNT_DISTINCT","title":"APPROX_COUNT_DISTINCT","href":"/reference-sql/functions-reference/aggregation/approx-count-distinct"},{"sidebarTitle":"ARRAY_AGG","title":"ARRAY_AGG","href":"/reference-sql/functions-reference/aggregation/array-agg"},{"sidebarTitle":"AVG","title":"AVG","href":"/reference-sql/functions-reference/aggregation/avg"},{"sidebarTitle":"BIT_AND","title":"BIT_AND","href":"/reference-sql/functions-reference/aggregation/bit_and"},{"sidebarTitle":"BIT_OR","title":"BIT_OR","href":"/reference-sql/functions-reference/aggregation/bit_or"},{"sidebarTitle":"BIT_XOR","title":"BIT_XOR","href":"/reference-sql/functions-reference/aggregation/bit_xor"},{"sidebarTitle":"BOOL_AND","title":"BOOL_AND","href":"/reference-sql/functions-reference/aggregation/bool_and"},{"sidebarTitle":"BOOL_OR","title":"BOOL_OR","href":"/reference-sql/functions-reference/aggregation/bool_or"},{"sidebarTitle":"CORR","title":"CORR","href":"/reference-sql/functions-reference/aggregation/corr"},{"sidebarTitle":"COUNT","title":"COUNT","href":"/reference-sql/functions-reference/aggregation/count"},{"sidebarTitle":"COUNTING_HLL_COUNT_DISTINCT","title":"COUNTING_HLL_COUNT_DISTINCT","href":"/reference-sql/functions-reference/aggregation/counting-hll-count-distinct"},{"sidebarTitle":"COVAR_POP","title":"COVAR_POP","href":"/reference-sql/functions-reference/aggregation/covar-pop"},{"sidebarTitle":"COVAR_SAMP","title":"COVAR_SAMP","href":"/reference-sql/functions-reference/aggregation/covar-samp"},{"sidebarTitle":"GROUPING","title":"GROUPING","href":"/reference-sql/functions-reference/aggregation/grouping"},{"sidebarTitle":"HASH_AGG","title":"HASH_AGG","href":"/reference-sql/functions-reference/aggregation/hash-agg"},{"sidebarTitle":"HLL_COUNT_BUILD","title":"HLL_COUNT_BUILD","href":"/reference-sql/functions-reference/aggregation/hll-count-build"},{"sidebarTitle":"HLL_COUNT_DISTINCT","title":"HLL_COUNT_DISTINCT","href":"/reference-sql/functions-reference/aggregation/hll-count-distinct"},{"sidebarTitle":"HLL_COUNT_MERGE","title":"HLL_COUNT_MERGE","href":"/reference-sql/functions-reference/aggregation/hll-count-merge"},{"sidebarTitle":"MAX_BY","title":"MAX_BY","href":"/reference-sql/functions-reference/aggregation/max-by"},{"sidebarTitle":"MAX","title":"MAX","href":"/reference-sql/functions-reference/aggregation/max"},{"sidebarTitle":"MEDIAN","title":"MEDIAN","href":"/reference-sql/functions-reference/aggregation/median"},{"sidebarTitle":"MIN_BY","title":"MIN_BY","href":"/reference-sql/functions-reference/aggregation/min-by"},{"sidebarTitle":"MIN","title":"MIN","href":"/reference-sql/functions-reference/aggregation/min"},{"sidebarTitle":"PERCENTILE_CONT","title":"PERCENTILE_CONT","href":"/reference-sql/functions-reference/aggregation/percentile-cont"},{"sidebarTitle":"STDDEV_POP","title":"STDDEV_POP","href":"/reference-sql/functions-reference/aggregation/stddev-pop"},{"sidebarTitle":"STDDEV_SAMP","title":"STDDEV_SAMP","href":"/reference-sql/functions-reference/aggregation/stddev-samp"},{"sidebarTitle":"STRING_AGG","title":"STRING_AGG","href":"/reference-sql/functions-reference/aggregation/string-agg"},{"sidebarTitle":"SUM","title":"SUM","href":"/reference-sql/functions-reference/aggregation/sum"},{"sidebarTitle":"VAR_POP","title":"VAR_POP","href":"/reference-sql/functions-reference/aggregation/variance-pop"},{"sidebarTitle":"VAR_SAMP","title":"VAR_SAMP","href":"/reference-sql/functions-reference/aggregation/variance-samp"}]},{"group":"AI functions","pages":[{"sidebarTitle":"Overview","title":"AI functions","href":"/reference-sql/functions-reference/ai"},{"sidebarTitle":"AI_EMBED_TEXT","title":"AI_EMBED_TEXT","href":"/reference-sql/functions-reference/ai/ai-embed-text"},{"sidebarTitle":"AI_QUERY","title":"AI_QUERY","href":"/reference-sql/functions-reference/ai/ai-query"},{"sidebarTitle":"AWS_BEDROCK_AI_QUERY","title":"AWS_BEDROCK_AI_QUERY","href":"/reference-sql/functions-reference/ai/aws-bedrock-ai-query"}]},{"group":"Array functions","pages":[{"sidebarTitle":"ARRAY_CONCAT","title":"ARRAY_CONCAT","href":"/reference-sql/functions-reference/array/array-concat"},{"sidebarTitle":"ARRAY_CONTAINS","title":"ARRAY_CONTAINS","href":"/reference-sql/functions-reference/array/array-contains"},{"sidebarTitle":"ARRAY_COUNT_DISTINCT","title":"ARRAY_COUNT_DISTINCT","href":"/reference-sql/functions-reference/array/array-count-distinct"},{"sidebarTitle":"ARRAY_COUNT","title":"ARRAY_COUNT","href":"/reference-sql/functions-reference/array/array-count"},{"sidebarTitle":"ARRAY_DISTINCT","title":"ARRAY_DISTINCT","href":"/reference-sql/functions-reference/array/array-distinct"},{"sidebarTitle":"ARRAY_INTERSECT","title":"ARRAY_INTERSECT","href":"/reference-sql/functions-reference/array/array-intersect"},{"sidebarTitle":"ARRAY_LENGTH","title":"ARRAY_LENGTH","href":"/reference-sql/functions-reference/array/array-length"},{"sidebarTitle":"ARRAY_MAX","title":"ARRAY_MAX","href":"/reference-sql/functions-reference/array/array-max"},{"sidebarTitle":"ARRAY_MIN","title":"ARRAY_MIN","href":"/reference-sql/functions-reference/array/array-min"},{"sidebarTitle":"ARRAY_REVERSE_SORT","title":"ARRAY_REVERSE_SORT","href":"/reference-sql/functions-reference/array/array-reverse-sort"},{"sidebarTitle":"ARRAY_REVERSE","title":"ARRAY_REVERSE","href":"/reference-sql/functions-reference/array/array-reverse"},{"sidebarTitle":"ARRAY_SLICE","title":"ARRAY_SLICE","href":"/reference-sql/functions-reference/array/array-slice"},{"sidebarTitle":"ARRAY_SORT","title":"ARRAY_SORT","href":"/reference-sql/functions-reference/array/array-sort"},{"sidebarTitle":"ARRAY_SUM","title":"ARRAY_SUM","href":"/reference-sql/functions-reference/array/array-sum"},{"sidebarTitle":"ARRAY_TO_STRING","title":"ARRAY_TO_STRING","href":"/reference-sql/functions-reference/array/array-to-string"},{"sidebarTitle":"ARRAY_UPPER","title":"ARRAY_UPPER","href":"/reference-sql/functions-reference/array/array-upper"},{"sidebarTitle":"ARRAYS_OVERLAP","title":"ARRAYS_OVERLAP","href":"/reference-sql/functions-reference/array/arrays-overlap"},{"sidebarTitle":"ARRAY_FLATTEN","title":"ARRAY_FLATTEN","href":"/reference-sql/functions-reference/array/flatten"},{"sidebarTitle":"INDEX_OF","title":"INDEX_OF","href":"/reference-sql/functions-reference/array/index-of"}]},{"group":"Binary functions","pages":[{"sidebarTitle":"CONVERT_FROM","title":"CONVERT_FROM","href":"/reference-sql/functions-reference/bytea/convert-from"},{"sidebarTitle":"DECODE","title":"DECODE","href":"/reference-sql/functions-reference/bytea/decode"},{"sidebarTitle":"ENCODE","title":"ENCODE","href":"/reference-sql/functions-reference/bytea/encode"}]},{"group":"Conditional and miscellaneous functions","pages":[{"sidebarTitle":"CASE","title":"CASE","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/case"},{"sidebarTitle":"CAST","title":"CAST","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/cast"},{"sidebarTitle":"CITY_HASH","title":"CITY_HASH","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/city-hash"},{"sidebarTitle":"COALESCE","title":"COALESCE","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/coalesce"},{"sidebarTitle":"GREATEST","title":"GREATEST","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/greatest"},{"sidebarTitle":"HASH","title":"HASH","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/hash"},{"sidebarTitle":"IF","title":"IF","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/if"},{"sidebarTitle":"IFNULL","title":"IFNULL","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/ifnull"},{"sidebarTitle":"LEAST","title":"LEAST","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/least"},{"sidebarTitle":"NULLIF","title":"NULLIF","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/nullif"},{"sidebarTitle":"TRY_CAST","title":"TRY_CAST","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/try-cast"},{"sidebarTitle":"TYPEOF","title":"TYPEOF","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/typeof"},{"sidebarTitle":"VERSION","title":"VERSION","href":"/reference-sql/functions-reference/conditional-and-miscellaneous/version"}]},{"group":"DataSketches functions","pages":[{"sidebarTitle":"Overview","title":"DataSketches functions","href":"/reference-sql/functions-reference/datasketches"},{"sidebarTitle":"APACHE_DATASKETCHES_HLL_BUILD","title":"APACHE_DATASKETCHES_HLL_BUILD","href":"/reference-sql/functions-reference/datasketches/apache-datasketches-hll-build"},{"sidebarTitle":"APACHE_DATASKETCHES_HLL_ESTIMATE","title":"APACHE_DATASKETCHES_HLL_ESTIMATE","href":"/reference-sql/functions-reference/datasketches/apache-datasketches-hll-estimate"},{"sidebarTitle":"APACHE_DATASKETCHES_HLL_MERGE","title":"APACHE_DATASKETCHES_HLL_MERGE","href":"/reference-sql/functions-reference/datasketches/apache-datasketches-hll-merge"}]},{"group":"Date and time functions","pages":[{"sidebarTitle":"AGO","title":"AGO","href":"/reference-sql/functions-reference/date-and-time/ago"},{"sidebarTitle":"CURRENT_DATE","title":"CURRENT_DATE","href":"/reference-sql/functions-reference/date-and-time/current-date"},{"sidebarTitle":"CURRENT_TIMESTAMP","title":"CURRENT_TIMESTAMP","href":"/reference-sql/functions-reference/date-and-time/current-timestamptz"},{"sidebarTitle":"DATE_ADD","title":"DATE_ADD","href":"/reference-sql/functions-reference/date-and-time/date-add"},{"sidebarTitle":"DATE_DIFF","title":"DATE_DIFF","href":"/reference-sql/functions-reference/date-and-time/date-diff"},{"sidebarTitle":"DATE_TRUNC","title":"DATE_TRUNC","href":"/reference-sql/functions-reference/date-and-time/date-trunc"},{"sidebarTitle":"DATE","title":"DATE","href":"/reference-sql/functions-reference/date-and-time/date"},{"sidebarTitle":"EXTRACT","title":"EXTRACT","href":"/reference-sql/functions-reference/date-and-time/extract"},{"sidebarTitle":"LOCALTIMESTAMP","title":"LOCALTIMESTAMP","href":"/reference-sql/functions-reference/date-and-time/localtimestamp"},{"sidebarTitle":"TO_CHAR","title":"TO_CHAR","href":"/reference-sql/functions-reference/date-and-time/to-char"},{"sidebarTitle":"TO_DATE","title":"TO_DATE","href":"/reference-sql/functions-reference/date-and-time/to-date"},{"sidebarTitle":"TO_TIMESTAMP","title":"TO_TIMESTAMP","href":"/reference-sql/functions-reference/date-and-time/to-timestamp"},{"sidebarTitle":"TO_YYYYMM","title":"TO_YYYYMM","href":"/reference-sql/functions-reference/date-and-time/to-yyyymm"},{"sidebarTitle":"TO_YYYYMMDD","title":"TO_YYYYMMDD","href":"/reference-sql/functions-reference/date-and-time/to-yyyymmdd"}]},{"group":"Geospatial functions","pages":[{"sidebarTitle":"ST_ASBINARY","title":"ST_ASBINARY","href":"/reference-sql/functions-reference/geospatial/st_asbinary"},{"sidebarTitle":"ST_ASEWKB","title":"ST_ASEWKB","href":"/reference-sql/functions-reference/geospatial/st_asewkb"},{"sidebarTitle":"ST_ASGEOJSON","title":"ST_ASGEOJSON","href":"/reference-sql/functions-reference/geospatial/st_asgeojson"},{"sidebarTitle":"ST_ASTEXT","title":"ST_ASTEXT","href":"/reference-sql/functions-reference/geospatial/st_astext"},{"sidebarTitle":"ST_CONTAINS","title":"ST_CONTAINS","href":"/reference-sql/functions-reference/geospatial/st_contains"},{"sidebarTitle":"ST_COVERS","title":"ST_COVERS","href":"/reference-sql/functions-reference/geospatial/st_covers"},{"sidebarTitle":"ST_DISTANCE","title":"ST_DISTANCE","href":"/reference-sql/functions-reference/geospatial/st_distance"},{"sidebarTitle":"ST_GEOGFROMGEOJSON","title":"ST_GEOGFROMGEOJSON","href":"/reference-sql/functions-reference/geospatial/st_geogfromgeojson"},{"sidebarTitle":"ST_GEOGFROMTEXT","title":"ST_GEOGFROMTEXT","href":"/reference-sql/functions-reference/geospatial/st_geogfromtext"},{"sidebarTitle":"ST_GEOGFROMWKB","title":"ST_GEOGFROMWKB","href":"/reference-sql/functions-reference/geospatial/st_geogfromwkb"},{"sidebarTitle":"ST_GEOGPOINT","title":"ST_GEOGPOINT","href":"/reference-sql/functions-reference/geospatial/st_geogpoint"},{"sidebarTitle":"ST_INTERSECTS","title":"ST_INTERSECTS","href":"/reference-sql/functions-reference/geospatial/st_intersects"},{"sidebarTitle":"ST_S2CELLIDFROMPOINT","title":"ST_S2CELLIDFROMPOINT","href":"/reference-sql/functions-reference/geospatial/st_s2cellidfrompoint"},{"sidebarTitle":"ST_X","title":"ST_X","href":"/reference-sql/functions-reference/geospatial/st_x"},{"sidebarTitle":"ST_Y","title":"ST_Y","href":"/reference-sql/functions-reference/geospatial/st_y"}]},{"group":"Iceberg functions","pages":[{"sidebarTitle":"Overview","title":"Iceberg functions","href":"/reference-sql/functions-reference/iceberg"},{"sidebarTitle":"READ_ICEBERG","title":"READ_ICEBERG","href":"/reference-sql/functions-reference/iceberg/read_iceberg"},{"sidebarTitle":"LIST_ICEBERG_FILES","title":"LIST_ICEBERG_FILES","href":"/reference-sql/functions-reference/iceberg/list_iceberg_files"},{"group":"Partition transform functions","pages":[{"sidebarTitle":"ICEBERG_YEAR","title":"ICEBERG_YEAR","href":"/reference-sql/functions-reference/iceberg/partitioning/iceberg_year"},{"sidebarTitle":"ICEBERG_MONTH","title":"ICEBERG_MONTH","href":"/reference-sql/functions-reference/iceberg/partitioning/iceberg_month"},{"sidebarTitle":"ICEBERG_DAY","title":"ICEBERG_DAY","href":"/reference-sql/functions-reference/iceberg/partitioning/iceberg_day"},{"sidebarTitle":"ICEBERG_HOUR","title":"ICEBERG_HOUR","href":"/reference-sql/functions-reference/iceberg/partitioning/iceberg_hour"},{"sidebarTitle":"ICEBERG_BUCKET","title":"ICEBERG_BUCKET","href":"/reference-sql/functions-reference/iceberg/partitioning/iceberg_bucket"},{"sidebarTitle":"ICEBERG_TRUNCATE","title":"ICEBERG_TRUNCATE","href":"/reference-sql/functions-reference/iceberg/partitioning/iceberg_truncate"}]}]},{"group":"DuckLake functions","pages":[{"sidebarTitle":"Overview","title":"DuckLake functions","href":"/reference-sql/functions-reference/ducklake/ducklake"},{"sidebarTitle":"READ_DUCKLAKE","title":"READ_DUCKLAKE","href":"/reference-sql/functions-reference/ducklake/read_ducklake"},{"sidebarTitle":"LIST_DUCKLAKE_FILES","title":"LIST_DUCKLAKE_FILES","href":"/reference-sql/functions-reference/ducklake/list_ducklake_files"}]},{"group":"JSON functions","pages":[{"sidebarTitle":"Overview","title":"JSON functions","href":"/reference-sql/functions-reference/json"},{"sidebarTitle":"CHECK_JSON","title":"CHECK_JSON","href":"/reference-sql/functions-reference/json/check-json"},{"sidebarTitle":"JSON_ARRAY_LENGTH","title":"JSON_ARRAY_LENGTH","href":"/reference-sql/functions-reference/json/json-array-length"},{"sidebarTitle":"JSON_EXTRACT_ARRAY","title":"JSON_EXTRACT_ARRAY","href":"/reference-sql/functions-reference/json/json-extract-array"},{"sidebarTitle":"JSON_EXTRACT","title":"JSON_EXTRACT","href":"/reference-sql/functions-reference/json/json-extract"},{"sidebarTitle":"JSON_POINTER_EXTRACT_KEYS","title":"JSON_POINTER_EXTRACT_KEYS","href":"/reference-sql/functions-reference/json/json-pointer-extract-keys"},{"sidebarTitle":"JSON_POINTER_EXTRACT_TEXT","title":"JSON_POINTER_EXTRACT_TEXT","href":"/reference-sql/functions-reference/json/json-pointer-extract-text"},{"sidebarTitle":"JSON_POINTER_EXTRACT_VALUES","title":"JSON_POINTER_EXTRACT_VALUES","href":"/reference-sql/functions-reference/json/json-pointer-extract-values"},{"sidebarTitle":"JSON_VALUE_ARRAY","title":"JSON_VALUE_ARRAY","href":"/reference-sql/functions-reference/json/json-value-array"},{"sidebarTitle":"JSON_VALUE","title":"JSON_VALUE","href":"/reference-sql/functions-reference/json/json-value"},{"sidebarTitle":"JSON_FORMAT","title":"JSON_FORMAT","href":"/reference-sql/functions-reference/json/json-format"},{"sidebarTitle":"JSON_IS_VALID","title":"JSON_IS_VALID","href":"/reference-sql/functions-reference/json/json-is-valid"},{"sidebarTitle":"JSON_TYPEOF","title":"JSON_TYPEOF","href":"/reference-sql/functions-reference/json/json-typeof"},{"sidebarTitle":"JSON operators","title":"JSON Operators","href":"/reference-sql/functions-reference/json/json-operators"},{"sidebarTitle":"TO_JSON","title":"TO_JSON","href":"/reference-sql/functions-reference/json/to-json"},{"sidebarTitle":"TO_JSON_STRING","title":"TO_JSON_STRING","href":"/reference-sql/functions-reference/json/to-json-string"}]},{"group":"Lambda functions","pages":[{"sidebarTitle":"Overview","title":"Lambda functions","href":"/reference-sql/functions-reference/lambda"},{"sidebarTitle":"ARRAY_ALL_MATCH","title":"ARRAY_ALL_MATCH","href":"/reference-sql/functions-reference/lambda/array-all-match"},{"sidebarTitle":"ARRAY_ANY_MATCH","title":"ARRAY_ANY_MATCH","href":"/reference-sql/functions-reference/lambda/array-any-match"},{"sidebarTitle":"ARRAY_FIRST","title":"ARRAY_FIRST","href":"/reference-sql/functions-reference/lambda/array-first"},{"sidebarTitle":"ARRAY_FILTER","title":"ARRAY_FILTER","href":"/reference-sql/functions-reference/lambda/filter"},{"sidebarTitle":"ARRAY_TRANSFORM","title":"ARRAY_TRANSFORM","href":"/reference-sql/functions-reference/lambda/transform"}]},{"group":"Numeric functions","pages":[{"sidebarTitle":"ABS","title":"ABS","href":"/reference-sql/functions-reference/numeric/abs"},{"sidebarTitle":"ACOS","title":"ACOS","href":"/reference-sql/functions-reference/numeric/acos"},{"sidebarTitle":"ACOSH","title":"ACOSH","href":"/reference-sql/functions-reference/numeric/acosh"},{"sidebarTitle":"ARRAY_ENUMERATE","title":"ARRAY_ENUMERATE","href":"/reference-sql/functions-reference/numeric/array-enumerate"},{"sidebarTitle":"ASIN","title":"ASIN","href":"/reference-sql/functions-reference/numeric/asin"},{"sidebarTitle":"ASINH","title":"ASINH","href":"/reference-sql/functions-reference/numeric/asinh"},{"sidebarTitle":"ATAN","title":"ATAN","href":"/reference-sql/functions-reference/numeric/atan"},{"sidebarTitle":"ATAN2","title":"ATAN2","href":"/reference-sql/functions-reference/numeric/atan2"},{"sidebarTitle":"ATANH","title":"ATANH","href":"/reference-sql/functions-reference/numeric/atanh"},{"sidebarTitle":"BIT_SHIFT_LEFT","title":"BIT_SHIFT_LEFT","href":"/reference-sql/functions-reference/numeric/bit_shift_left"},{"sidebarTitle":"BIT_SHIFT_RIGHT","title":"BIT_SHIFT_RIGHT","href":"/reference-sql/functions-reference/numeric/bit_shift_right"},{"sidebarTitle":"CBRT","title":"CBRT","href":"/reference-sql/functions-reference/numeric/cbrt"},{"sidebarTitle":"CEIL","title":"CEIL","href":"/reference-sql/functions-reference/numeric/ceil"},{"sidebarTitle":"COS","title":"COS","href":"/reference-sql/functions-reference/numeric/cos"},{"sidebarTitle":"COSH","title":"COSH","href":"/reference-sql/functions-reference/numeric/cosh"},{"sidebarTitle":"CSCH","title":"CSCH","href":"/reference-sql/functions-reference/numeric/csch"},{"sidebarTitle":"COTH","title":"COTH","href":"/reference-sql/functions-reference/numeric/coth"},{"sidebarTitle":"COT","title":"COT","href":"/reference-sql/functions-reference/numeric/cot"},{"sidebarTitle":"DEGREES","title":"DEGREES","href":"/reference-sql/functions-reference/numeric/degrees"},{"sidebarTitle":"EXP","title":"EXP","href":"/reference-sql/functions-reference/numeric/exp"},{"sidebarTitle":"FLOOR","title":"FLOOR","href":"/reference-sql/functions-reference/numeric/floor"},{"sidebarTitle":"HLL_COUNT_ESTIMATE","title":"HLL_COUNT_ESTIMATE","href":"/reference-sql/functions-reference/numeric/hll-count-estimate"},{"sidebarTitle":"IS_FINITE","title":"IS_FINITE","href":"/reference-sql/functions-reference/numeric/is_finite"},{"sidebarTitle":"IS_INFINITE","title":"IS_INFINITE","href":"/reference-sql/functions-reference/numeric/is_infinite"},{"sidebarTitle":"LN","title":"LN","href":"/reference-sql/functions-reference/numeric/ln"},{"sidebarTitle":"LOG","title":"LOG","href":"/reference-sql/functions-reference/numeric/log"},{"sidebarTitle":"MOD","title":"MOD","href":"/reference-sql/functions-reference/numeric/mod"},{"sidebarTitle":"PARAM","title":"PARAM","href":"/reference-sql/functions-reference/numeric/param"},{"sidebarTitle":"PI","title":"PI","href":"/reference-sql/functions-reference/numeric/pi"},{"sidebarTitle":"POW","title":"POW","href":"/reference-sql/functions-reference/numeric/pow"},{"sidebarTitle":"RADIANS","title":"RADIANS","href":"/reference-sql/functions-reference/numeric/radians"},{"sidebarTitle":"RANDOM","title":"RANDOM","href":"/reference-sql/functions-reference/numeric/random"},{"sidebarTitle":"ROUND","title":"ROUND","href":"/reference-sql/functions-reference/numeric/round"},{"sidebarTitle":"SIGN","title":"SIGN","href":"/reference-sql/functions-reference/numeric/sign"},{"sidebarTitle":"SIN","title":"SIN","href":"/reference-sql/functions-reference/numeric/sin"},{"sidebarTitle":"SINH","title":"SINH","href":"/reference-sql/functions-reference/numeric/sinh"},{"sidebarTitle":"SECH","title":"SECH","href":"/reference-sql/functions-reference/numeric/sech"},{"sidebarTitle":"SQRT","title":"SQRT","href":"/reference-sql/functions-reference/numeric/sqrt"},{"sidebarTitle":"TAN","title":"TAN","href":"/reference-sql/functions-reference/numeric/tan"},{"sidebarTitle":"TANH","title":"TANH","href":"/reference-sql/functions-reference/numeric/tanh"},{"sidebarTitle":"TRUNC","title":"TRUNC","href":"/reference-sql/functions-reference/numeric/trunc"}]},{"group":"Session functions","pages":[{"sidebarTitle":"CURRENT_ACCOUNT","title":"CURRENT_ACCOUNT","href":"/reference-sql/functions-reference/session/current-account"},{"sidebarTitle":"CURRENT_DATABASE","title":"CURRENT_DATABASE","href":"/reference-sql/functions-reference/session/current-database"},{"sidebarTitle":"SESSION_USER","title":"SESSION_USER","href":"/reference-sql/functions-reference/session/session-user"}]},{"group":"String functions","pages":[{"sidebarTitle":"BTRIM","title":"BTRIM","href":"/reference-sql/functions-reference/string/btrim"},{"sidebarTitle":"CONCAT","title":"CONCAT","href":"/reference-sql/functions-reference/string/concat"},{"sidebarTitle":"GEN_RANDOM_UUID_TEXT","title":"GEN_RANDOM_UUID_TEXT","href":"/reference-sql/functions-reference/string/gen-random-uuid-text"},{"sidebarTitle":"ICU_NORMALIZE","title":"ICU_NORMALIZE","href":"/reference-sql/functions-reference/string/icu_normalize"},{"sidebarTitle":"ILIKE","title":"ILIKE","href":"/reference-sql/functions-reference/string/ilike"},{"sidebarTitle":"LENGTH","title":"LENGTH","href":"/reference-sql/functions-reference/string/length"},{"sidebarTitle":"LIKE","title":"LIKE","href":"/reference-sql/functions-reference/string/like"},{"sidebarTitle":"LOWER","title":"LOWER","href":"/reference-sql/functions-reference/string/lower"},{"sidebarTitle":"LPAD","title":"LPAD","href":"/reference-sql/functions-reference/string/lpad"},{"sidebarTitle":"LTRIM","title":"LTRIM","href":"/reference-sql/functions-reference/string/ltrim"},{"sidebarTitle":"MD5","title":"MD5","href":"/reference-sql/functions-reference/string/md5"},{"sidebarTitle":"MD5_NUMBER_LOWER64","title":"MD5_NUMBER_LOWER64","href":"/reference-sql/functions-reference/string/md5-number-lower64"},{"sidebarTitle":"MD5_NUMBER_UPPER64","title":"MD5_NUMBER_UPPER64","href":"/reference-sql/functions-reference/string/md5-number-upper64"},{"sidebarTitle":"NGRAM","title":"NGRAM","href":"/reference-sql/functions-reference/string/ngram"},{"sidebarTitle":"OCTET_LENGTH","title":"OCTET_LENGTH","href":"/reference-sql/functions-reference/string/octet_length"},{"sidebarTitle":"POSITION","title":"POSITION","href":"/reference-sql/functions-reference/string/position"},{"sidebarTitle":"REGEXP_EXTRACT_ALL","title":"REGEXP_EXTRACT_ALL","href":"/reference-sql/functions-reference/string/regexp-extract-all"},{"sidebarTitle":"REGEXP_EXTRACT","title":"REGEXP_EXTRACT","href":"/reference-sql/functions-reference/string/regexp-extract"},{"sidebarTitle":"REGEXP_LIKE_ANY","title":"REGEXP_LIKE_ANY","href":"/reference-sql/functions-reference/string/regexp-like-any"},{"sidebarTitle":"REGEXP_LIKE","title":"REGEXP_LIKE","href":"/reference-sql/functions-reference/string/regexp-like"},{"sidebarTitle":"REGEXP_REPLACE","title":"REGEXP_REPLACE","href":"/reference-sql/functions-reference/string/regexp-replace"},{"sidebarTitle":"REPEAT","title":"REPEAT","href":"/reference-sql/functions-reference/string/repeat"},{"sidebarTitle":"REPLACE","title":"REPLACE","href":"/reference-sql/functions-reference/string/replace"},{"sidebarTitle":"REVERSE","title":"REVERSE","href":"/reference-sql/functions-reference/string/reverse"},{"sidebarTitle":"RPAD","title":"RPAD","href":"/reference-sql/functions-reference/string/rpad"},{"sidebarTitle":"RTRIM","title":"RTRIM","href":"/reference-sql/functions-reference/string/rtrim"},{"sidebarTitle":"SPLIT_PART","title":"SPLIT_PART","href":"/reference-sql/functions-reference/string/split-part"},{"sidebarTitle":"SOUNDEX","title":"SOUNDEX","href":"/reference-sql/functions-reference/string/soundex"},{"sidebarTitle":"STRING_TO_ARRAY","title":"STRING_TO_ARRAY","href":"/reference-sql/functions-reference/string/string-to-array"},{"sidebarTitle":"STRPOS","title":"STRPOS","href":"/reference-sql/functions-reference/string/strpos"},{"sidebarTitle":"SUBSTRING, SUBSTR","title":"SUBSTRING, SUBSTR","href":"/reference-sql/functions-reference/string/substring"},{"sidebarTitle":"TO_BIN","title":"TO_BIN","href":"/reference-sql/functions-reference/string/to_bin"},{"sidebarTitle":"TO_OCT","title":"TO_OCT","href":"/reference-sql/functions-reference/string/to_oct"},{"sidebarTitle":"TRIM","title":"TRIM","href":"/reference-sql/functions-reference/string/trim"},{"sidebarTitle":"UPPER","title":"UPPER","href":"/reference-sql/functions-reference/string/upper"},{"sidebarTitle":"URL_DECODE","title":"URL_DECODE","href":"/reference-sql/functions-reference/string/url_decode"},{"sidebarTitle":"URL_ENCODE","title":"URL_ENCODE","href":"/reference-sql/functions-reference/string/url_encode"}]},{"group":"Table-valued functions","pages":[{"sidebarTitle":"Overview","title":"Table-valued functions","href":"/reference-sql/functions-reference/table-valued"},{"sidebarTitle":"GENERATE_SERIES","title":"GENERATE_SERIES","href":"/reference-sql/functions-reference/table-valued/generate-series"},{"sidebarTitle":"LIST_OBJECTS","title":"LIST_OBJECTS","href":"/reference-sql/functions-reference/table-valued/list-objects"},{"sidebarTitle":"READ_AVRO","title":"READ_AVRO","href":"/reference-sql/functions-reference/table-valued/read_avro"},{"sidebarTitle":"READ_CSV","title":"READ_CSV","href":"/reference-sql/functions-reference/table-valued/read_csv"},{"sidebarTitle":"READ_FILES","title":"READ_FILES","href":"/reference-sql/functions-reference/table-valued/read_files"},{"sidebarTitle":"READ_JSON","title":"READ_JSON","href":"/reference-sql/functions-reference/table-valued/read_json"},{"sidebarTitle":"READ_PARQUET","title":"READ_PARQUET","href":"/reference-sql/functions-reference/table-valued/read_parquet"},{"sidebarTitle":"PARQUET_METADATA","title":"PARQUET_METADATA","href":"/reference-sql/functions-reference/table-valued/parquet_metadata"},{"sidebarTitle":"READ_SNAPSHOT","title":"READ_SNAPSHOT","href":"/reference-sql/functions-reference/table-valued/read_snapshot"},{"sidebarTitle":"READ_STREAM","title":"READ_STREAM","href":"/reference-sql/functions-reference/table-valued/read_stream"},{"sidebarTitle":"READ_TEXT","title":"READ_TEXT","href":"/reference-sql/functions-reference/table-valued/read_text"}]},{"group":"Vector functions","pages":[{"sidebarTitle":"Overview","title":"Vector functions","href":"/reference-sql/functions-reference/vector"},{"sidebarTitle":"VECTOR_ADD","title":"VECTOR_ADD","href":"/reference-sql/functions-reference/vector/vector-add"},{"sidebarTitle":"VECTOR_COSINE_DISTANCE","title":"VECTOR_COSINE_DISTANCE","href":"/reference-sql/functions-reference/vector/vector-cosine-distance"},{"sidebarTitle":"VECTOR_COSINE_SIMILARITY","title":"VECTOR_COSINE_SIMILARITY","href":"/reference-sql/functions-reference/vector/vector-cosine-similarity"},{"sidebarTitle":"VECTOR_EUCLIDEAN_DISTANCE","title":"VECTOR_EUCLIDEAN_DISTANCE","href":"/reference-sql/functions-reference/vector/vector-euclidean-distance"},{"sidebarTitle":"VECTOR_INNER_PRODUCT","title":"VECTOR_INNER_PRODUCT","href":"/reference-sql/functions-reference/vector/vector-inner-product"},{"sidebarTitle":"VECTOR_MANHATTAN_DISTANCE","title":"VECTOR_MANHATTAN_DISTANCE","href":"/reference-sql/functions-reference/vector/vector-manhattan-distance"},{"sidebarTitle":"VECTOR_SEARCH","title":"VECTOR_SEARCH","href":"/reference-sql/functions-reference/vector/vector-search"},{"sidebarTitle":"VECTOR_SQUARED_EUCLIDEAN_DISTANCE","title":"VECTOR_SQUARED_EUCLIDEAN_DISTANCE","href":"/reference-sql/functions-reference/vector/vector-squared-euclidean-distance"},{"sidebarTitle":"VECTOR_SUBTRACT","title":"VECTOR_SUBTRACT","href":"/reference-sql/functions-reference/vector/vector-subtract"}]},{"group":"Window functions","pages":[{"sidebarTitle":"Overview","title":"Window functions","href":"/reference-sql/functions-reference/window"},{"sidebarTitle":"AVG OVER","title":"AVG OVER","href":"/reference-sql/functions-reference/window/avg-window"},{"sidebarTitle":"COUNT OVER","title":"COUNT OVER","href":"/reference-sql/functions-reference/window/count-window"},{"sidebarTitle":"CUME_DIST OVER","title":"CUME_DIST OVER","href":"/reference-sql/functions-reference/window/cume-dist"},{"sidebarTitle":"DENSE_RANK OVER","title":"DENSE_RANK OVER","href":"/reference-sql/functions-reference/window/dense-rank"},{"sidebarTitle":"FIRST_VALUE","title":"FIRST_VALUE","href":"/reference-sql/functions-reference/window/first-value"},{"sidebarTitle":"LAG OVER","title":"LAG OVER","href":"/reference-sql/functions-reference/window/lag"},{"sidebarTitle":"LEAD OVER","title":"LEAD OVER","href":"/reference-sql/functions-reference/window/lead"},{"sidebarTitle":"MAX OVER","title":"MAX OVER","href":"/reference-sql/functions-reference/window/max-window"},{"sidebarTitle":"MIN OVER","title":"MIN OVER","href":"/reference-sql/functions-reference/window/min-window"},{"sidebarTitle":"NTH_VALUE OVER","title":"NTH_VALUE OVER","href":"/reference-sql/functions-reference/window/nth-value"},{"sidebarTitle":"NTILE OVER","title":"NTILE OVER","href":"/reference-sql/functions-reference/window/ntile"},{"sidebarTitle":"PERCENT_RANK OVER","title":"PERCENT_RANK OVER","href":"/reference-sql/functions-reference/window/percent-rank"},{"sidebarTitle":"RANK OVER","title":"RANK OVER","href":"/reference-sql/functions-reference/window/rank"},{"sidebarTitle":"ROW_NUMBER OVER","title":"ROW_NUMBER OVER","href":"/reference-sql/functions-reference/window/row-number"},{"sidebarTitle":"SUM OVER","title":"SUM OVER","href":"/reference-sql/functions-reference/window/sum-window"}]}]},{"sidebarTitle":"System settings","title":"System settings","href":"/reference-sql/system-settings"},{"title":"Differences from PostgreSQL","sidebarTitle":"Differences from PostgreSQL","href":"/reference-sql/postgresql-differences"},{"group":"BigQuery compatibility","pages":[{"title":"BigQuery compatibility","sidebarTitle":"Overview","href":"/reference-sql/bigquery/overview"},{"title":"Query syntax","sidebarTitle":"Query syntax","href":"/reference-sql/bigquery/query-syntax"},{"title":"Pipe syntax","sidebarTitle":"Pipe syntax","href":"/reference-sql/bigquery/pipe-syntax"},{"title":"Data types","sidebarTitle":"Data types","href":"/reference-sql/bigquery/data-types"},{"title":"Operators","sidebarTitle":"Operators","href":"/reference-sql/bigquery/operators"},{"group":"Functions","pages":[{"title":"Date and time functions","sidebarTitle":"Date and time","href":"/reference-sql/bigquery/functions/date-and-time"},{"title":"String functions","sidebarTitle":"String","href":"/reference-sql/bigquery/functions/string"},{"title":"JSON functions","sidebarTitle":"JSON","href":"/reference-sql/bigquery/functions/json"},{"title":"Array functions","sidebarTitle":"Array","href":"/reference-sql/bigquery/functions/array"},{"title":"Aggregate and approximate functions","sidebarTitle":"Aggregate \u0026 approximate","href":"/reference-sql/bigquery/functions/aggregate"},{"title":"Math functions","sidebarTitle":"Math","href":"/reference-sql/bigquery/functions/math"},{"title":"Geography functions","sidebarTitle":"Geography","href":"/reference-sql/bigquery/functions/geography"},{"title":"Conditional and conversion functions","sidebarTitle":"Conditional \u0026 conversion","href":"/reference-sql/bigquery/functions/conditional-and-conversion"}]},{"title":"Statements","sidebarTitle":"Statements","href":"/reference-sql/bigquery/statements"},{"title":"BigQuery information_schema","sidebarTitle":"Information schema","href":"/reference-sql/bigquery/information-schema"}]},{"group":"Snowflake compatibility","pages":[{"title":"Snowflake compatibility","sidebarTitle":"Overview","href":"/reference-sql/snowflake/overview"},{"title":"Query syntax","sidebarTitle":"Query syntax","href":"/reference-sql/snowflake/query-syntax"},{"title":"Data types","sidebarTitle":"Data types","href":"/reference-sql/snowflake/data-types"},{"title":"Operators","sidebarTitle":"Operators","href":"/reference-sql/snowflake/operators"},{"group":"Functions","pages":[{"title":"Aggregate functions","sidebarTitle":"Aggregate","href":"/reference-sql/snowflake/functions/aggregate"},{"title":"Bitwise expression functions","sidebarTitle":"Bitwise","href":"/reference-sql/snowflake/functions/bitwise"},{"title":"Conditional expression functions","sidebarTitle":"Conditional","href":"/reference-sql/snowflake/functions/conditional"},{"title":"Context functions","sidebarTitle":"Context","href":"/reference-sql/snowflake/functions/context"},{"title":"Conversion functions","sidebarTitle":"Conversion","href":"/reference-sql/snowflake/functions/conversion"},{"title":"Date \u0026 time functions","sidebarTitle":"Date and time","href":"/reference-sql/snowflake/functions/date-and-time"},{"title":"Geospatial functions","sidebarTitle":"Geospatial","href":"/reference-sql/snowflake/functions/geospatial"},{"title":"Hash functions","sidebarTitle":"Hash","href":"/reference-sql/snowflake/functions/hash"},{"title":"Numeric functions","sidebarTitle":"Numeric","href":"/reference-sql/snowflake/functions/numeric"},{"title":"Regular expressions functions","sidebarTitle":"Regular expressions","href":"/reference-sql/snowflake/functions/regular-expressions"},{"title":"Semi-structured and structured data functions","sidebarTitle":"Semi-structured","href":"/reference-sql/snowflake/functions/semi-structured"},{"title":"String \u0026 binary functions","sidebarTitle":"String and binary","href":"/reference-sql/snowflake/functions/string"},{"title":"Window functions","sidebarTitle":"Window","href":"/reference-sql/snowflake/functions/window"}]},{"title":"Statements","sidebarTitle":"Statements","href":"/reference-sql/snowflake/statements"},{"title":"Snowflake information_schema","sidebarTitle":"Information schema","href":"/reference-sql/snowflake/information-schema"}]}]},{"group":"Release notes","pages":[{"sidebarTitle":"Overview","title":"Release notes","href":"/release-notes"},{"sidebarTitle":"Release notes archive","title":"Release notes archive","href":"/release-notes/release-notes-archive"}]},{"group":"API reference","pages":[{"sidebarTitle":"Overview","title":"API reference","href":"/reference-api"},{"sidebarTitle":"Synchronous queries","title":"Synchronous queries","href":"/reference-api/using-sync-queries"},{"sidebarTitle":"Asynchronous queries","title":"Asynchronous queries","href":"/reference-api/using-async-queries"},{"sidebarTitle":"Uploading files","title":"Upload and query local files","href":"/reference-api/uploading-files"},{"group":"OpenAPI spec","pages":[{"group":"API Reference","pages":[{"title":"Submit a sql statement for execution","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/firebolt-db/openapi/main/specification/yaml/firebolt_query_v2.3.yaml post /query","href":"/api-reference/submit-a-sql-statement-for-execution"}]}]}]},{"group":"Legal","pages":[{"sidebarTitle":"EU Data Act Switching","title":"Firebolt Data Portability \u0026 Switching Specifications","href":"/legal/data-portability-and-export"}]}]},"title":"Incremental loading from Amazon S3 - Firebolt Documentation","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}