duckrun 0.2.16.dev0__tar.gz → 0.2.16.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of duckrun might be problematic. Click here for more details.
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/PKG-INFO +1 -1
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun/writer.py +35 -6
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun.egg-info/PKG-INFO +1 -1
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/pyproject.toml +1 -1
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/LICENSE +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/README.md +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun/__init__.py +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun/auth.py +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun/core.py +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun/files.py +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun/lakehouse.py +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun/runner.py +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun/semantic_model.py +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun/stats.py +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun.egg-info/SOURCES.txt +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun.egg-info/dependency_links.txt +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun.egg-info/requires.txt +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/duckrun.egg-info/top_level.txt +0 -0
- {duckrun-0.2.16.dev0 → duckrun-0.2.16.dev1}/setup.cfg +0 -0
|
@@ -3,6 +3,20 @@ Delta Lake writer functionality for duckrun - Spark-style write API
|
|
|
3
3
|
"""
|
|
4
4
|
from deltalake import DeltaTable, write_deltalake, __version__ as deltalake_version
|
|
5
5
|
|
|
6
|
+
# Try to import WriterProperties for Rust engine (available in 0.18.2+)
|
|
7
|
+
try:
|
|
8
|
+
from deltalake.writer import WriterProperties
|
|
9
|
+
_HAS_WRITER_PROPERTIES = True
|
|
10
|
+
except ImportError:
|
|
11
|
+
_HAS_WRITER_PROPERTIES = False
|
|
12
|
+
|
|
13
|
+
# Try to import PyArrow dataset for old PyArrow engine
|
|
14
|
+
try:
|
|
15
|
+
import pyarrow.dataset as ds
|
|
16
|
+
_HAS_PYARROW_DATASET = True
|
|
17
|
+
except ImportError:
|
|
18
|
+
_HAS_PYARROW_DATASET = False
|
|
19
|
+
|
|
6
20
|
|
|
7
21
|
# Row Group configuration for optimal Delta Lake performance
|
|
8
22
|
RG = 8_000_000
|
|
@@ -23,12 +37,14 @@ def _build_write_deltalake_args(path, df, mode, schema_mode=None, partition_by=N
|
|
|
23
37
|
- Has max_rows_per_file/max_rows_per_group/min_rows_per_group for optimization
|
|
24
38
|
- When mergeSchema=True: must set schema_mode='merge' + engine='rust', NO row group params
|
|
25
39
|
- When mergeSchema=False: use row group params, DON'T set engine (pyarrow is default)
|
|
40
|
+
- COMPRESSION: Defaults to ZSTD via writer_properties (rust) or file_options (pyarrow)
|
|
26
41
|
|
|
27
42
|
deltalake 0.20+:
|
|
28
43
|
- Does NOT have 'engine' parameter (everything is rust, pyarrow deprecated)
|
|
29
44
|
- Does NOT have max_rows_per_file (row group optimization removed)
|
|
30
45
|
- When mergeSchema=True: must set schema_mode='merge'
|
|
31
46
|
- When mergeSchema=False: just write normally (no special params)
|
|
47
|
+
- COMPRESSION: Defaults to ZSTD via writer_properties (rust only)
|
|
32
48
|
|
|
33
49
|
Uses version detection for simpler logic.
|
|
34
50
|
"""
|
|
@@ -50,7 +66,13 @@ def _build_write_deltalake_args(path, df, mode, schema_mode=None, partition_by=N
|
|
|
50
66
|
# deltalake 0.18.2-0.19.x: must also set engine='rust' for schema merging
|
|
51
67
|
# Do NOT use row group params (they conflict with rust engine)
|
|
52
68
|
args['engine'] = 'rust'
|
|
53
|
-
|
|
69
|
+
# Set ZSTD compression for Rust engine
|
|
70
|
+
if _HAS_WRITER_PROPERTIES:
|
|
71
|
+
args['writer_properties'] = WriterProperties(compression='ZSTD')
|
|
72
|
+
else:
|
|
73
|
+
# Version 0.20+: rust is default, just add compression
|
|
74
|
+
if _HAS_WRITER_PROPERTIES:
|
|
75
|
+
args['writer_properties'] = WriterProperties(compression='ZSTD')
|
|
54
76
|
else:
|
|
55
77
|
# Normal write mode (no schema merging)
|
|
56
78
|
if _IS_OLD_DELTALAKE:
|
|
@@ -59,7 +81,14 @@ def _build_write_deltalake_args(path, df, mode, schema_mode=None, partition_by=N
|
|
|
59
81
|
args['max_rows_per_file'] = RG
|
|
60
82
|
args['max_rows_per_group'] = RG
|
|
61
83
|
args['min_rows_per_group'] = RG
|
|
62
|
-
|
|
84
|
+
# Set ZSTD compression for PyArrow engine
|
|
85
|
+
if _HAS_PYARROW_DATASET:
|
|
86
|
+
args['file_options'] = ds.ParquetFileFormat().make_write_options(compression='ZSTD')
|
|
87
|
+
else:
|
|
88
|
+
# Version 0.20+: no optimization available (rust by default, no row group params supported)
|
|
89
|
+
# Set ZSTD compression for Rust engine
|
|
90
|
+
if _HAS_WRITER_PROPERTIES:
|
|
91
|
+
args['writer_properties'] = WriterProperties(compression='ZSTD')
|
|
63
92
|
|
|
64
93
|
return args
|
|
65
94
|
|
|
@@ -135,14 +164,14 @@ class DeltaWriter:
|
|
|
135
164
|
# Prepare info message based on version and settings
|
|
136
165
|
if self._schema_mode == 'merge':
|
|
137
166
|
if _IS_OLD_DELTALAKE:
|
|
138
|
-
engine_info = " (engine=rust, schema_mode=merge)"
|
|
167
|
+
engine_info = " (engine=rust, schema_mode=merge, compression=ZSTD)"
|
|
139
168
|
else:
|
|
140
|
-
engine_info = " (schema_mode=merge, rust by default)"
|
|
169
|
+
engine_info = " (schema_mode=merge, rust by default, compression=ZSTD)"
|
|
141
170
|
else:
|
|
142
171
|
if _IS_OLD_DELTALAKE:
|
|
143
|
-
engine_info = " (engine=pyarrow, optimized row groups)"
|
|
172
|
+
engine_info = " (engine=pyarrow, optimized row groups, compression=ZSTD)"
|
|
144
173
|
else:
|
|
145
|
-
engine_info = " (engine=rust by default)"
|
|
174
|
+
engine_info = " (engine=rust by default, compression=ZSTD)"
|
|
146
175
|
|
|
147
176
|
partition_info = f" partitioned by {self._partition_by}" if self._partition_by else ""
|
|
148
177
|
print(f"Writing to Delta table: {schema}.{table} (mode={self._mode}){engine_info}{partition_info}")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|