Skip to main content

FastBCP 1.0 ADBC SQL Server Benchmark

Pierre-Antoine Collet
Pierre-Antoine Collet, ARPE.IO Developer
2026-06-26 · 12 min · Benchmark · FastBCP

FastBCP 1.0 introduces a new adbc_mssql connector built on Apache Arrow's ADBC interface. It transfers data in columnar Arrow format — no row-by-row serialization. We benchmarked it against the classic mssql .NET driver, DuckDB (both adbc_scanner and mssql extensions), and Sling on a 15 million row TPC-H table.

The result: 17.3 million cells per second with 8 threads and Zstd compression — 23x faster than Sling and 12x faster than DuckDB.

Test Environment

ComponentDetails
OSWindows 11 (10.0.26200)
CPUIntel Core i7-14650HX
SQL Server2022 Developer Edition — localhost,11433
Databasetpch10
Tabledbo.orders15,000,000 rows, 9 columns = 135,000,000 cells
FastBCPv1.0.3.0 (.NET 10.0.9)
DuckDBv1.5.3 + adbc_scanner extension (query-farm) + mssql extension (Tmonster)
Slingv1.5.20 (standard driver only — ADBC crashes on Windows)
OutputLocal disk — --merge false (no file merging)

Full Results

#ToolConnectorModeCompressionTime (s)Size (MB)rows/scells/sCommand
1FastBCPmssqlsingleNone25.21,859604,8695,357,143cmd
2FastBCPmssqlsingleSnappy25.3631602,7755,335,968cmd
3FastBCPmssqlsingleGzip49.1374307,6122,749,490cmd
4FastBCPmssqlsingleZstd29.6382514,3144,560,811cmd
5FastBCPadbc_mssqlsingleNone14.31,2831,079,7219,440,559cmd
6FastBCPadbc_mssqlsingleSnappy15.5539989,9108,709,677cmd
7FastBCPadbc_mssqlsingleGzip57.2367264,0742,360,140cmd
8FastBCPadbc_mssqlsingleZstd19.9386766,3706,783,920cmd
9FastBCPmssqlp4None14.81,8591,080,5509,121,622cmd
10FastBCPmssqlp4Snappy17.7632891,5767,627,119cmd
11FastBCPmssqlp4Gzip24.8375625,7825,443,548cmd
12FastBCPmssqlp4Zstd17.2384916,4717,848,837cmd
13FastBCPmssqlp8None13.11,8591,227,16710,305,344cmd
14FastBCPmssqlp8Snappy14.76321,080,3769,183,673cmd
15FastBCPmssqlp8Gzip20.3376769,2316,650,246cmd
16FastBCPmssqlp8Zstd17.3385908,8047,803,468cmd
17FastBCPadbc_mssqlp4None8.01,2841,875,00016,875,000cmd
18FastBCPadbc_mssqlp4Snappy9.45371,595,74514,361,702cmd
19FastBCPadbc_mssqlp4Gzip19.5366769,2316,923,077cmd
20FastBCPadbc_mssqlp4Zstd9.83841,530,61213,775,510cmd
21FastBCPadbc_mssqlp8None6.41,2832,343,75021,093,750cmd
22FastBCPadbc_mssqlp8Snappy7.95411,898,73417,088,608cmd
23FastBCPadbc_mssqlp8Gzip14.83701,013,5149,121,622cmd
24FastBCPadbc_mssqlp8Zstd7.83881,923,07717,307,692cmd
25DuckDBadbc_scannersingleNone94.21,310159,2361,433,121cmd
26DuckDBadbc_scannersingleSnappy96.8565155,0401,394,628cmd
27DuckDBadbc_scannersingleGzip154.636297,087873,350cmd
28DuckDBadbc_scannersingleZstd97.7373153,5311,381,781cmd
29SlingsqlserversingleNone184.557582,231731,707cmd
30SlingsqlserversingleSnappy192.757578,729700,571cmd
31SlingsqlserversingleGzip274.337455,075492,160cmd
32SlingsqlserversingleZstd181.638483,492743,392cmd
33DuckDBmssqlsingleNone31.71,310473,1864,258,490cmd
34DuckDBmssqlsingleSnappy25.3565593,1605,338,440cmd
35DuckDBmssqlsingleGzip89.2362168,1611,513,453cmd
36DuckDBmssqlsingleZstd26.2373572,5195,152,672cmd
note

Sling ADBC crashes on Windows (purego: struct return values only supported on darwin arm64 & amd64). All Sling tests use the standard driver (without use_adbc).

Charts

Tool Comparison — Zstd Compression

Tool comparison — Zstd compression, lower is better Export time (seconds) with Zstd compression across all tools and parallelism modes

Compression Comparison — FastBCP adbc_mssql p8

Compression comparison — FastBCP adbc_mssql with 8 threads Time and file size trade-offs for None, Snappy, Gzip, and Zstd with FastBCP adbc_mssql at parallelism degree 8

Connector Impact: mssql vs adbc_mssql

Connector impact — mssql vs adbc_mssql Performance gain of the Arrow-native ADBC connector over the .NET mssql driver at each parallelism level

Parallelism Scaling — FastBCP adbc_mssql

Parallelism scaling — FastBCP adbc_mssql Throughput scaling from single thread to degree 4 and degree 8 with adbc_mssql connector

File Size by Tool and Compression

File sizes by tool and compression Output file sizes (MB) across all tools and compression codecs

Key Takeaways

  1. FastBCP adbc_mssql is the clear winner: the ADBC Arrow-native connector is 1.5–2.2x faster than the .NET mssql driver, thanks to columnar Apache Arrow data transfer (zero row-by-row serialization).

  2. Best configuration: FastBCP adbc_mssql + paralleldegree 8 + Zstd exports 15M rows (135M cells) in 7.8 seconds at 17.3M cells/s for a 388 MB file. That's 23x faster than Sling and 12x faster than DuckDB.

  3. Zstd = best trade-off: 3.3x compression ratio with minimal overhead (+22% time vs None). Gzip compresses 5% more but is 2x slower.

  4. Parallelism scales well: going from single thread to degree 8 yields a 2.6x speedup (adbc) and 1.9x (mssql). Gains diminish beyond 4 threads on this table.

  5. DuckDB mssql extension: significantly faster than adbc_scanner (~26–32s vs ~95s, 3–4x speedup). Produces identical file sizes and Parquet schema.

  6. DuckDB adbc_scanner: functional but slow (~95s single thread, ~1.4M cells/s). No native multi-connection parallelism.

  7. Sling: slowest (180–274s, ~0.7M cells/s). The ADBC option (use_adbc: true) crashes on Windows due to a purego bug in the Go ADBC driver manager.

Parquet Validation

All 36 output files were verified readable with DuckDB read_parquet(). Every file contains the expected 15,000,000 rows.

Parallel exports (p4 = 4 chunks, p8 = 8 chunks) are also readable via glob: read_parquet('*_chunk_*.parquet').

SQL Server Source Types

ColumnSQL Server TypePrecisionScale
o_orderdatedate
o_orderkeybigint190
o_custkeybigint190
o_orderprioritychar(15)
o_shippriorityint100
o_clerkchar(15)
o_orderstatuschar(1)
o_totalpricemoney194
o_commentvarchar(79)

Logical Types (read by DuckDB)

ColumnFastBCP mssqlFastBCP adbcDuckDB adbcDuckDB mssqlSling std
o_orderdateDATEDATEDATEDATEDATE
o_orderkeyBIGINTBIGINTBIGINTBIGINTBIGINT
o_custkeyBIGINTBIGINTBIGINTBIGINTBIGINT
o_orderpriorityVARCHARVARCHARVARCHARVARCHARVARCHAR
o_shippriorityINTEGERINTEGERINTEGERINTEGERINTEGER
o_clerkVARCHARVARCHARVARCHARVARCHARVARCHAR
o_orderstatusVARCHARVARCHARVARCHARVARCHARVARCHAR
o_totalpriceDECIMAL(19,4)DECIMAL(19,4)DECIMAL(19,4)DECIMAL(19,4)DECIMAL(24,6)
o_commentVARCHARVARCHARVARCHARVARCHARVARCHAR

Parquet Physical Types & Metadata

ColumnSQL ServerFastBCP mssqlFastBCP adbcDuckDB adbcDuckDB mssqlSling std
o_orderdatedateINT32 / DATEINT32 / DateType()INT32 / DATEINT32 / DATEINT32 / DATE
o_orderkeybigintINT64 / INT_64INT64INT64 / INT_64INT64 / INT_64INT64 / INT_64
o_custkeybigintINT64 / INT_64INT64INT64 / INT_64INT64 / INT_64INT64 / INT_64
o_orderprioritychar(15)BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8
o_shippriorityintINT32 / INT_32INT32INT32 / INT_32INT32 / INT_32INT32 / INT_32
o_clerkchar(15)BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8
o_orderstatuschar(1)BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8
o_totalpricemoney(19,4)FIXED_LEN / Decimal(19,4)FIXED_LEN / Decimal(19,4)FIXED_LEN / Decimal(19,4)FIXED_LEN / Decimal(19,4)FIXED_LEN / Decimal(24,6)
o_commentvarchar(79)BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8BYTE_ARRAY / UTF8

Annotation Differences

AspectFastBCP mssqlFastBCP adbcDuckDB adbcDuckDB mssqlSling std
converted_type annotationsFull (INT_64, INT_32, DATE)Partial (missing for INT columns)FullFullFull
logical_type annotationsFull (IntType, StringType)Partial (DateType, StringType only)FullFullFull
o_totalprice precision19,4 (matches source)19,4 (matches source)19,4 (matches source)19,4 (matches source)24,6 (widened)
Schema root namerootschemaduckdb_schemaduckdb_schemaduckdb_schema
tip

FastBCP mssql and both DuckDB connectors produce full converted_type and logical_type annotations. FastBCP adbc has partial annotations (INT columns missing). Only Sling widens o_totalprice to DECIMAL(24,6).

Commands Used

FastBCP — mssql connector (single thread)
# None compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--query "SELECT * FROM dbo.orders" `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_single_none_orders.parquet" `
--parquetcompression None `
--nobanner --runid "fastbcp_mssql_single_none"

# Snappy compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--query "SELECT * FROM dbo.orders" `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_single_snappy_orders.parquet" `
--parquetcompression Snappy `
--nobanner --runid "fastbcp_mssql_single_snappy"

# Gzip compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--query "SELECT * FROM dbo.orders" `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_single_gzip_orders.parquet" `
--parquetcompression Gzip `
--nobanner --runid "fastbcp_mssql_single_gzip"

# Zstd compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--query "SELECT * FROM dbo.orders" `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_single_zstd_orders.parquet" `
--parquetcompression Zstd `
--nobanner --runid "fastbcp_mssql_single_zstd"
FastBCP — adbc_mssql connector (single thread)
# None compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--query "SELECT * FROM dbo.orders" `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_single_none_orders.parquet" `
--parquetcompression None `
--nobanner --runid "fastbcp_adbc_single_none"

# Snappy compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--query "SELECT * FROM dbo.orders" `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_single_snappy_orders.parquet" `
--parquetcompression Snappy `
--nobanner --runid "fastbcp_adbc_single_snappy"

# Gzip compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--query "SELECT * FROM dbo.orders" `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_single_gzip_orders.parquet" `
--parquetcompression Gzip `
--nobanner --runid "fastbcp_adbc_single_gzip"

# Zstd compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--query "SELECT * FROM dbo.orders" `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_single_zstd_orders.parquet" `
--parquetcompression Zstd `
--nobanner --runid "fastbcp_adbc_single_zstd"
FastBCP — mssql connector (parallel degree 4)
# None compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_p4_none_orders.parquet" `
--parquetcompression None `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 4 `
--merge false `
--nobanner --runid "fastbcp_mssql_p4_none"

# Snappy compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_p4_snappy_orders.parquet" `
--parquetcompression Snappy `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 4 `
--merge false `
--nobanner --runid "fastbcp_mssql_p4_snappy"

# Gzip compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_p4_gzip_orders.parquet" `
--parquetcompression Gzip `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 4 `
--merge false `
--nobanner --runid "fastbcp_mssql_p4_gzip"

# Zstd compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_p4_zstd_orders.parquet" `
--parquetcompression Zstd `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 4 `
--merge false `
--nobanner --runid "fastbcp_mssql_p4_zstd"
FastBCP — mssql connector (parallel degree 8)
# None compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_p8_none_orders.parquet" `
--parquetcompression None `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 8 `
--merge false `
--nobanner --runid "fastbcp_mssql_p8_none"

# Snappy compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_p8_snappy_orders.parquet" `
--parquetcompression Snappy `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 8 `
--merge false `
--nobanner --runid "fastbcp_mssql_p8_snappy"

# Gzip compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_p8_gzip_orders.parquet" `
--parquetcompression Gzip `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 8 `
--merge false `
--nobanner --runid "fastbcp_mssql_p8_gzip"

# Zstd compression
.\FastBCP.exe `
--connectiontype mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_mssql_p8_zstd_orders.parquet" `
--parquetcompression Zstd `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 8 `
--merge false `
--nobanner --runid "fastbcp_mssql_p8_zstd"
FastBCP — adbc_mssql connector (parallel degree 4)
# None compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_p4_none_orders.parquet" `
--parquetcompression None `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 4 `
--merge false `
--nobanner --runid "fastbcp_adbc_p4_none"

# Snappy compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_p4_snappy_orders.parquet" `
--parquetcompression Snappy `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 4 `
--merge false `
--nobanner --runid "fastbcp_adbc_p4_snappy"

# Gzip compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_p4_gzip_orders.parquet" `
--parquetcompression Gzip `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 4 `
--merge false `
--nobanner --runid "fastbcp_adbc_p4_gzip"

# Zstd compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_p4_zstd_orders.parquet" `
--parquetcompression Zstd `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 4 `
--merge false `
--nobanner --runid "fastbcp_adbc_p4_zstd"
FastBCP — adbc_mssql connector (parallel degree 8)
# None compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_p8_none_orders.parquet" `
--parquetcompression None `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 8 `
--merge false `
--nobanner --runid "fastbcp_adbc_p8_none"

# Snappy compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_p8_snappy_orders.parquet" `
--parquetcompression Snappy `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 8 `
--merge false `
--nobanner --runid "fastbcp_adbc_p8_snappy"

# Gzip compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_p8_gzip_orders.parquet" `
--parquetcompression Gzip `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 8 `
--merge false `
--nobanner --runid "fastbcp_adbc_p8_gzip"

# Zstd compression
.\FastBCP.exe `
--connectiontype adbc_mssql `
--server "localhost,11433" `
--database tpch10 `
--trusted `
--sourceschema dbo `
--sourcetable orders `
--directory "D:\FastBCP\Test\ADBC\output" `
--fileoutput "fastbcp_adbc_p8_zstd_orders.parquet" `
--parquetcompression Zstd `
--parallelmethod Ntile `
--distributekeycolumn o_orderkey `
--paralleldegree 8 `
--merge false `
--nobanner --runid "fastbcp_adbc_p8_zstd"
DuckDB — adbc_scanner extension
# None compression
duckdb -unsigned -c "
INSTALL adbc_scanner FROM community;
LOAD adbc_scanner;
SET VARIABLE conn = (SELECT adbc_connect({'driver': 'mssql', 'uri': 'sqlserver://localhost:11433?database=tpch10&trusted_connection=true'}));
COPY (SELECT * FROM adbc_scan(getvariable('conn')::BIGINT, 'SELECT * FROM dbo.orders'))
TO 'D:/FastBCP/Test/ADBC/output/duckdb_adbc_single_none_orders.parquet'
(FORMAT PARQUET, COMPRESSION UNCOMPRESSED);
SELECT adbc_disconnect(getvariable('conn')::BIGINT);
"

# Snappy compression
duckdb -unsigned -c "
INSTALL adbc_scanner FROM community;
LOAD adbc_scanner;
SET VARIABLE conn = (SELECT adbc_connect({'driver': 'mssql', 'uri': 'sqlserver://localhost:11433?database=tpch10&trusted_connection=true'}));
COPY (SELECT * FROM adbc_scan(getvariable('conn')::BIGINT, 'SELECT * FROM dbo.orders'))
TO 'D:/FastBCP/Test/ADBC/output/duckdb_adbc_single_snappy_orders.parquet'
(FORMAT PARQUET, COMPRESSION SNAPPY);
SELECT adbc_disconnect(getvariable('conn')::BIGINT);
"

# Gzip compression
duckdb -unsigned -c "
INSTALL adbc_scanner FROM community;
LOAD adbc_scanner;
SET VARIABLE conn = (SELECT adbc_connect({'driver': 'mssql', 'uri': 'sqlserver://localhost:11433?database=tpch10&trusted_connection=true'}));
COPY (SELECT * FROM adbc_scan(getvariable('conn')::BIGINT, 'SELECT * FROM dbo.orders'))
TO 'D:/FastBCP/Test/ADBC/output/duckdb_adbc_single_gzip_orders.parquet'
(FORMAT PARQUET, COMPRESSION GZIP);
SELECT adbc_disconnect(getvariable('conn')::BIGINT);
"

# Zstd compression
duckdb -unsigned -c "
INSTALL adbc_scanner FROM community;
LOAD adbc_scanner;
SET VARIABLE conn = (SELECT adbc_connect({'driver': 'mssql', 'uri': 'sqlserver://localhost:11433?database=tpch10&trusted_connection=true'}));
COPY (SELECT * FROM adbc_scan(getvariable('conn')::BIGINT, 'SELECT * FROM dbo.orders'))
TO 'D:/FastBCP/Test/ADBC/output/duckdb_adbc_single_zstd_orders.parquet'
(FORMAT PARQUET, COMPRESSION ZSTD);
SELECT adbc_disconnect(getvariable('conn')::BIGINT);
"
DuckDB — mssql extension
# None compression
duckdb -unsigned -c "
INSTALL mssql FROM community;
LOAD mssql;
ATTACH 'SERVER=localhost,11433;DATABASE=tpch10;Trusted_Connection=Yes' AS ms (TYPE mssql);
COPY (SELECT * FROM ms.dbo.orders)
TO 'D:/FastBCP/Test/ADBC/output/duckdb_mssql_single_none_orders.parquet'
(FORMAT PARQUET, COMPRESSION UNCOMPRESSED);
DETACH ms;
"

# Snappy compression
duckdb -unsigned -c "
INSTALL mssql FROM community;
LOAD mssql;
ATTACH 'SERVER=localhost,11433;DATABASE=tpch10;Trusted_Connection=Yes' AS ms (TYPE mssql);
COPY (SELECT * FROM ms.dbo.orders)
TO 'D:/FastBCP/Test/ADBC/output/duckdb_mssql_single_snappy_orders.parquet'
(FORMAT PARQUET, COMPRESSION SNAPPY);
DETACH ms;
"

# Gzip compression
duckdb -unsigned -c "
INSTALL mssql FROM community;
LOAD mssql;
ATTACH 'SERVER=localhost,11433;DATABASE=tpch10;Trusted_Connection=Yes' AS ms (TYPE mssql);
COPY (SELECT * FROM ms.dbo.orders)
TO 'D:/FastBCP/Test/ADBC/output/duckdb_mssql_single_gzip_orders.parquet'
(FORMAT PARQUET, COMPRESSION GZIP);
DETACH ms;
"

# Zstd compression
duckdb -unsigned -c "
INSTALL mssql FROM community;
LOAD mssql;
ATTACH 'SERVER=localhost,11433;DATABASE=tpch10;Trusted_Connection=Yes' AS ms (TYPE mssql);
COPY (SELECT * FROM ms.dbo.orders)
TO 'D:/FastBCP/Test/ADBC/output/duckdb_mssql_single_zstd_orders.parquet'
(FORMAT PARQUET, COMPRESSION ZSTD);
DETACH ms;
"
Sling — sqlserver standard driver
# Connection setup (once)
sling conns set MSSQL_STD type=sqlserver host=localhost port=11433 database=tpch10 trusted_connection=true encrypt=disable

# None compression
sling run `
--src-conn MSSQL_STD `
--src-stream "dbo.orders" `
--tgt-object "file://D:/FastBCP/Test/ADBC/output/sling_std_single_none_orders.parquet" `
--tgt-options '{format: parquet, compression: none}'

# Snappy compression
sling run `
--src-conn MSSQL_STD `
--src-stream "dbo.orders" `
--tgt-object "file://D:/FastBCP/Test/ADBC/output/sling_std_single_snappy_orders.parquet" `
--tgt-options '{format: parquet, compression: snappy}'

# Gzip compression
sling run `
--src-conn MSSQL_STD `
--src-stream "dbo.orders" `
--tgt-object "file://D:/FastBCP/Test/ADBC/output/sling_std_single_gzip_orders.parquet" `
--tgt-options '{format: parquet, compression: gzip}'

# Zstd compression
sling run `
--src-conn MSSQL_STD `
--src-stream "dbo.orders" `
--tgt-object "file://D:/FastBCP/Test/ADBC/output/sling_std_single_zstd_orders.parquet" `
--tgt-options '{format: parquet, compression: zstd}'

Resources