Skip to content

Commit cf83480

Browse files
committed
fix(duckdb): allow creating tables using data with a different column order
1 parent 6ea5cd4 commit cf83480

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

ibis/backends/duckdb/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,9 @@ def create_table(
199199
final_table = sg.table(name, catalog=catalog, db=database, quoted=quoted)
200200
with self._safe_raw_sql(create_stmt) as cur:
201201
if query is not None:
202-
insert_stmt = sge.insert(query, into=initial_table).sql(dialect)
202+
insert_stmt = sge.insert(
203+
query, into=initial_table, columns=table.columns
204+
).sql(dialect)
203205
cur.execute(insert_stmt).fetchall()
204206

205207
if overwrite:

ibis/backends/duckdb/tests/test_client.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import os
44
import subprocess
55
import sys
6+
from datetime import datetime
67

78
import duckdb
89
import numpy as np
@@ -473,3 +474,12 @@ def test_create_temp_table_in_nondefault_schema():
473474
con.create_database(database)
474475
con.con.execute(f"USE {database}")
475476
con.create_table("foo", {"id": [1, 2, 3]}, temp=True)
477+
478+
479+
def test_create_table_with_out_of_order_columns(con):
480+
name = gen_name("out_of_order_columns_table")
481+
df = pd.DataFrame({"value": ["E1"], "id": [1], "date": [datetime(2025, 5, 13)]})
482+
schema = ibis.schema({"id": "int", "value": "str", "date": "timestamp"})
483+
assert list(df.columns) == ["value", "id", "date"]
484+
assert list(schema.names) == ["id", "value", "date"]
485+
con.create_table(name, df, schema=schema, temp=True)

0 commit comments

Comments
 (0)