--- title: "Distributed Write" sidebarTitle: "Distributed Write" description: "How LanceDB Enterprise distributes a CTAS import's writes across plan executors." icon: upload availability: embedded: unavailable enterprise: available --- Distributed write applies specifically to importing data with `CREATE TABLE ... AS SELECT`: the query node that planned the statement partitions the source -- Parquet files from a HuggingFace dataset, or row-group ranges of an existing Lance dataset in object storage -- across plan executors, each of which writes its own uncommitted Lance data files and reports back. The query node collects those results and commits them together as the new table's first version; no separate coordinator service is involved. See [Architecture](/index#architecture).
```mermaid %%{init: {"theme": "base", "themeVariables": { "background": "#171513", "primaryColor": "#1e1b19", "primaryTextColor": "#f4ebe8", "primaryBorderColor": "#4c443f", "lineColor": "#847770", "textColor": "#f4ebe8", "edgeLabelBackground": "#171513", "fontFamily": "Inter, sans-serif", "fontSize": "18px" }}}%% flowchart LR S["Source
HuggingFace Parquet, or an
existing Lance dataset in
S3 / GCS / Azure"] Q["Query node
plans the CTAS,
commits the result"] PE1["Plan executor
writes uncommitted files"] PE2["Plan executor
writes uncommitted files"] PE3["Plan executor
writes uncommitted files"] S --> Q Q --> PE1 Q --> PE2 Q --> PE3 PE1 --> Q PE2 --> Q PE3 --> Q classDef default fill:#1e1b19,stroke:#4c443f,stroke-width:1px,color:#f4ebe8 classDef accent fill:#2a1810,stroke:#e8582d,stroke-width:1.5px,color:#f4ebe8 class Q accent ```
```mermaid %%{init: {"theme": "base", "themeVariables": { "background": "#ffffff", "primaryColor": "#ffffff", "primaryTextColor": "#221d19", "primaryBorderColor": "#ad9e95", "lineColor": "#6b625c", "textColor": "#221d19", "edgeLabelBackground": "#ffffff", "fontFamily": "Inter, sans-serif", "fontSize": "18px" }}}%% flowchart LR S["Source
HuggingFace Parquet, or an
existing Lance dataset in
S3 / GCS / Azure"] Q["Query node
plans the CTAS,
commits the result"] PE1["Plan executor
writes uncommitted files"] PE2["Plan executor
writes uncommitted files"] PE3["Plan executor
writes uncommitted files"] S --> Q Q --> PE1 Q --> PE2 Q --> PE3 PE1 --> Q PE2 --> Q PE3 --> Q classDef default fill:#ffffff,stroke:#ad9e95,stroke-width:1px,color:#221d19 classDef accent fill:#fff1ec,stroke:#e8582d,stroke-width:1.5px,color:#221d19 class Q accent ```
An ordinary `INSERT` or `merge_insert`, from SQL or the SDK, does not distribute this way -- it runs as a single write, on whichever node or process executes it. Only a CTAS import fans the write itself out across machines. ## Write interfaces {#write-interfaces} - [Import Datasets](/ingestion/import) for the CTAS syntax this distributes. - [Insert data](/ingestion/insert) and [Merge](/ingestion/merge-insert) for the ordinary, non-distributed write paths. - [Storage Integration](/sql/ddl/storage-integration) for configuring the source a CTAS import reads from.