Symptom
Starting around July 1, 2026, LangSmith bulk exports to S3 began writing Parquet files with ZSTD (zstandard) compression instead of SNAPPY or GZIP. Downstream systems that do not support ZSTD Parquet (older Spark, Hive, Presto, some data lake ingestion services) either silently drop the data or throw decode errors.
Cause
A change deployed on July 1, 2026 flipped the default compression codec for the two internal export paths:
export_partition()(ClickHouse export path) previously defaulted to SNAPPY. It now defaults toNone.run_smithdb_export_partition()(SmithDB streaming path) previously defaulted to GZIP. It now defaults toNone.
When compression is None, both functions call get_bulk_export_default_compression(), which reads the FF_BULK_EXPORT_DEFAULT_COMPRESSION feature flag. On LangSmith SaaS (US cloud), that flag is set to zstandard. The change is intentional and is not being rolled back.
Resolution
The POST /api/v1/bulk-exports endpoint accepts an optional compression field in the JSON body. Setting it overrides the server-side default per job, so you can keep using a codec your downstream systems support. The field works for both one-time and recurring (scheduled) exports; update scheduled job definitions to include it.
Endpoint:
POST https://api.smith.langchain.com/api/v1/bulk-exportsHeaders:
Content-Type: application/json
X-API-Key: <your LangSmith API key>
X-Tenant-Id: <your workspace ID>Request body with explicit compression:
{
"bulk_export_destination_id": "your-destination-uuid",
"start_time": "2026-07-01T00:00:00Z",
"end_time": "2026-07-05T00:00:00Z",
"compression": "gzip"
}Omitting compression uses the server default (currently zstandard on SaaS).
Supported codecs
"gzip""snappy""zstd"/"zstandard"
Use gzip or snappy for broad compatibility with Spark, Athena, BigQuery, Databricks, and most data lake ingestion tools. ZSTD gives better compression ratios and faster decompression but is not universally supported for Parquet on older platforms.
Recommendation
Set compression explicitly on every bulk export request, including recurring jobs. That way future changes to the server-side default won't break downstream pipelines.