deltacat 1.1.14__py3-none-any.whl → 1.1.15__py3-none-any.whl

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.
Files changed (24) hide show
  1. deltacat/__init__.py +1 -1
  2. deltacat/compute/compactor/compaction_session.py +3 -2
  3. deltacat/compute/compactor/model/compact_partition_params.py +11 -1
  4. deltacat/compute/compactor/model/compaction_session_audit_info.py +2 -2
  5. deltacat/compute/compactor/model/delta_annotated.py +2 -4
  6. deltacat/compute/compactor/steps/hash_bucket.py +2 -3
  7. deltacat/compute/compactor_v2/compaction_session.py +26 -27
  8. deltacat/compute/compactor_v2/constants.py +4 -0
  9. deltacat/compute/compactor_v2/private/compaction_utils.py +103 -66
  10. deltacat/compute/compactor_v2/steps/merge.py +0 -3
  11. deltacat/compute/compactor_v2/utils/delta.py +2 -3
  12. deltacat/compute/compactor_v2/utils/io.py +0 -2
  13. deltacat/compute/compactor_v2/utils/merge.py +0 -1
  14. deltacat/tests/compute/compact_partition_multiple_rounds_test_cases.py +855 -0
  15. deltacat/tests/compute/compactor_v2/test_compaction_session.py +1 -1
  16. deltacat/tests/compute/test_compact_partition_multiple_rounds.py +330 -0
  17. deltacat/tests/compute/test_compact_partition_rebase.py +1 -1
  18. deltacat/tests/compute/test_util_create_table_deltas_repo.py +118 -0
  19. deltacat/tests/local_deltacat_storage/__init__.py +8 -5
  20. {deltacat-1.1.14.dist-info → deltacat-1.1.15.dist-info}/METADATA +1 -1
  21. {deltacat-1.1.14.dist-info → deltacat-1.1.15.dist-info}/RECORD +24 -22
  22. {deltacat-1.1.14.dist-info → deltacat-1.1.15.dist-info}/LICENSE +0 -0
  23. {deltacat-1.1.14.dist-info → deltacat-1.1.15.dist-info}/WHEEL +0 -0
  24. {deltacat-1.1.14.dist-info → deltacat-1.1.15.dist-info}/top_level.txt +0 -0
@@ -178,7 +178,7 @@ class TestCompactionSession:
178
178
  },
179
179
  "primary_keys": [],
180
180
  "rebase_source_partition_locator": source_delta.partition_locator,
181
- "rebase_source_partition_high_watermark": None,
181
+ "rebase_source_partition_high_watermark": source_delta.stream_position,
182
182
  "records_per_compacted_file": 4000,
183
183
  "s3_client_kwargs": {},
184
184
  "source_partition_locator": source_delta.partition_locator,
@@ -0,0 +1,330 @@
1
+ import ray
2
+ import os
3
+ from moto import mock_s3
4
+ import pytest
5
+ import boto3
6
+ from boto3.resources.base import ServiceResource
7
+ import pyarrow as pa
8
+ from deltacat.io.ray_plasma_object_store import RayPlasmaObjectStore
9
+ from pytest_benchmark.fixture import BenchmarkFixture
10
+
11
+ from deltacat.tests.compute.test_util_constant import (
12
+ TEST_S3_RCF_BUCKET_NAME,
13
+ DEFAULT_NUM_WORKERS,
14
+ DEFAULT_WORKER_INSTANCE_CPUS,
15
+ )
16
+ from deltacat.tests.compute.test_util_common import (
17
+ get_rcf,
18
+ )
19
+ from deltacat.tests.test_utils.utils import read_s3_contents
20
+ from deltacat.compute.compactor.model.compactor_version import CompactorVersion
21
+ from deltacat.tests.compute.test_util_common import (
22
+ get_compacted_delta_locator_from_rcf,
23
+ )
24
+ from deltacat.compute.compactor.model.compaction_session_audit_info import (
25
+ CompactionSessionAuditInfo,
26
+ )
27
+ from deltacat.tests.compute.test_util_create_table_deltas_repo import (
28
+ multiple_rounds_create_src_w_deltas_destination_rebase_w_deltas_strategy,
29
+ )
30
+ from deltacat.tests.compute.compact_partition_multiple_rounds_test_cases import (
31
+ MULTIPLE_ROUNDS_TEST_CASES,
32
+ )
33
+ from typing import Any, Callable, Dict, List, Optional, Set
34
+ from deltacat.types.media import StorageType
35
+ from deltacat.storage import (
36
+ DeltaLocator,
37
+ Partition,
38
+ )
39
+ from deltacat.types.media import ContentType
40
+ from deltacat.compute.compactor.model.compact_partition_params import (
41
+ CompactPartitionParams,
42
+ )
43
+ from deltacat.compute.compactor import (
44
+ RoundCompletionInfo,
45
+ )
46
+ from deltacat.utils.placement import (
47
+ PlacementGroupManager,
48
+ )
49
+
50
+ DATABASE_FILE_PATH_KEY, DATABASE_FILE_PATH_VALUE = (
51
+ "db_file_path",
52
+ "deltacat/tests/local_deltacat_storage/db_test.sqlite",
53
+ )
54
+
55
+
56
+ """
57
+ MODULE scoped fixtures
58
+ """
59
+
60
+
61
+ @pytest.fixture(autouse=True, scope="module")
62
+ def setup_ray_cluster():
63
+ ray.init(local_mode=True, ignore_reinit_error=True)
64
+ yield
65
+ ray.shutdown()
66
+
67
+
68
+ @pytest.fixture(autouse=True, scope="module")
69
+ def mock_aws_credential():
70
+ os.environ["AWS_ACCESS_KEY_ID"] = "testing"
71
+ os.environ["AWS_SECRET_ACCESS_ID"] = "testing"
72
+ os.environ["AWS_SECURITY_TOKEN"] = "testing"
73
+ os.environ["AWS_SESSION_TOKEN"] = "testing"
74
+ os.environ["AWS_DEFAULT_REGION"] = "us-east-1"
75
+ yield
76
+
77
+
78
+ @pytest.fixture(autouse=True, scope="module")
79
+ def cleanup_the_database_file_after_all_compaction_session_package_tests_complete():
80
+ # make sure the database file is deleted after all the compactor package tests are completed
81
+ if os.path.exists(DATABASE_FILE_PATH_VALUE):
82
+ os.remove(DATABASE_FILE_PATH_VALUE)
83
+
84
+
85
+ @pytest.fixture(scope="module")
86
+ def s3_resource(mock_aws_credential):
87
+ with mock_s3():
88
+ yield boto3.resource("s3")
89
+
90
+
91
+ @pytest.fixture(autouse=True, scope="module")
92
+ def setup_compaction_artifacts_s3_bucket(s3_resource: ServiceResource):
93
+ s3_resource.create_bucket(
94
+ ACL="authenticated-read",
95
+ Bucket=TEST_S3_RCF_BUCKET_NAME,
96
+ )
97
+ yield
98
+
99
+
100
+ """
101
+ FUNCTION scoped fixtures
102
+ """
103
+
104
+
105
+ @pytest.fixture(scope="function")
106
+ def local_deltacat_storage_kwargs(request: pytest.FixtureRequest):
107
+ # see deltacat/tests/local_deltacat_storage/README.md for documentation
108
+ kwargs_for_local_deltacat_storage: Dict[str, Any] = {
109
+ DATABASE_FILE_PATH_KEY: DATABASE_FILE_PATH_VALUE,
110
+ }
111
+ yield kwargs_for_local_deltacat_storage
112
+ if os.path.exists(DATABASE_FILE_PATH_VALUE):
113
+ os.remove(DATABASE_FILE_PATH_VALUE)
114
+
115
+
116
+ @pytest.mark.parametrize(
117
+ [
118
+ "test_name",
119
+ "primary_keys",
120
+ "sort_keys",
121
+ "partition_keys_param",
122
+ "partition_values_param",
123
+ "input_deltas_param",
124
+ "expected_terminal_compact_partition_result",
125
+ "expected_terminal_exception",
126
+ "expected_terminal_exception_message",
127
+ "create_placement_group_param",
128
+ "records_per_compacted_file_param",
129
+ "hash_bucket_count_param",
130
+ "read_kwargs_provider_param",
131
+ "drop_duplicates_param",
132
+ "skip_enabled_compact_partition_drivers",
133
+ "assert_compaction_audit",
134
+ "rebase_expected_compact_partition_result",
135
+ "num_rounds_param",
136
+ "compact_partition_func",
137
+ "compactor_version",
138
+ ],
139
+ [
140
+ (
141
+ test_name,
142
+ primary_keys,
143
+ sort_keys,
144
+ partition_keys_param,
145
+ partition_values_param,
146
+ input_deltas,
147
+ expected_terminal_compact_partition_result,
148
+ expected_terminal_exception,
149
+ expected_terminal_exception_message,
150
+ create_placement_group_param,
151
+ records_per_compacted_file_param,
152
+ hash_bucket_count_param,
153
+ drop_duplicates_param,
154
+ read_kwargs_provider,
155
+ skip_enabled_compact_partition_drivers,
156
+ assert_compaction_audit,
157
+ rebase_expected_compact_partition_result,
158
+ num_rounds_param,
159
+ compact_partition_func,
160
+ compactor_version,
161
+ )
162
+ for test_name, (
163
+ primary_keys,
164
+ sort_keys,
165
+ partition_keys_param,
166
+ partition_values_param,
167
+ input_deltas,
168
+ expected_terminal_compact_partition_result,
169
+ expected_terminal_exception,
170
+ expected_terminal_exception_message,
171
+ create_placement_group_param,
172
+ records_per_compacted_file_param,
173
+ hash_bucket_count_param,
174
+ drop_duplicates_param,
175
+ read_kwargs_provider,
176
+ skip_enabled_compact_partition_drivers,
177
+ assert_compaction_audit,
178
+ rebase_expected_compact_partition_result,
179
+ num_rounds_param,
180
+ compact_partition_func,
181
+ compactor_version,
182
+ ) in MULTIPLE_ROUNDS_TEST_CASES.items()
183
+ ],
184
+ ids=[test_name for test_name in MULTIPLE_ROUNDS_TEST_CASES],
185
+ )
186
+ def test_compact_partition_rebase_multiple_rounds_same_source_and_destination(
187
+ mocker,
188
+ s3_resource: ServiceResource,
189
+ local_deltacat_storage_kwargs: Dict[str, Any],
190
+ test_name: str,
191
+ primary_keys: Set[str],
192
+ sort_keys: List[Optional[Any]],
193
+ partition_keys_param: Optional[List[Any]],
194
+ partition_values_param: List[Optional[str]],
195
+ input_deltas_param: List[pa.Array],
196
+ expected_terminal_compact_partition_result: pa.Table,
197
+ expected_terminal_exception: BaseException,
198
+ expected_terminal_exception_message: Optional[str],
199
+ create_placement_group_param: bool,
200
+ records_per_compacted_file_param: int,
201
+ hash_bucket_count_param: int,
202
+ drop_duplicates_param: bool,
203
+ read_kwargs_provider_param: Any,
204
+ rebase_expected_compact_partition_result: pa.Table,
205
+ skip_enabled_compact_partition_drivers: List[CompactorVersion],
206
+ assert_compaction_audit: Optional[Callable],
207
+ compactor_version: Optional[CompactorVersion],
208
+ compact_partition_func: Callable,
209
+ num_rounds_param: int,
210
+ benchmark: BenchmarkFixture,
211
+ ):
212
+ import deltacat.tests.local_deltacat_storage as ds
213
+
214
+ ds_mock_kwargs = local_deltacat_storage_kwargs
215
+ """
216
+ This test tests different multi-round compaction rebase configurations,
217
+ as specified in compact_partition_multiple_rounds_test_cases.py
218
+ These tests do not test multi-round compaction backfill, which is
219
+ currently unsupported.
220
+ """
221
+ (
222
+ source_table_stream,
223
+ _,
224
+ rebased_table_stream,
225
+ _,
226
+ ) = multiple_rounds_create_src_w_deltas_destination_rebase_w_deltas_strategy(
227
+ primary_keys,
228
+ sort_keys,
229
+ partition_keys_param,
230
+ input_deltas_param,
231
+ partition_values_param,
232
+ ds_mock_kwargs,
233
+ )
234
+ source_partition: Partition = ds.get_partition(
235
+ source_table_stream.locator,
236
+ partition_values_param,
237
+ **ds_mock_kwargs,
238
+ )
239
+ rebased_partition: Partition = ds.get_partition(
240
+ rebased_table_stream.locator,
241
+ partition_values_param,
242
+ **ds_mock_kwargs,
243
+ )
244
+ total_cpus = DEFAULT_NUM_WORKERS * DEFAULT_WORKER_INSTANCE_CPUS
245
+ pgm = None
246
+ if create_placement_group_param:
247
+ pgm = PlacementGroupManager(
248
+ 1, total_cpus, DEFAULT_WORKER_INSTANCE_CPUS, memory_per_bundle=4000000
249
+ ).pgs[0]
250
+ compact_partition_params = CompactPartitionParams.of(
251
+ {
252
+ "compaction_artifact_s3_bucket": TEST_S3_RCF_BUCKET_NAME,
253
+ "compacted_file_content_type": ContentType.PARQUET,
254
+ "dd_max_parallelism_ratio": 1.0,
255
+ "deltacat_storage": ds,
256
+ "deltacat_storage_kwargs": ds_mock_kwargs,
257
+ "destination_partition_locator": rebased_partition.locator,
258
+ "hash_bucket_count": hash_bucket_count_param,
259
+ "last_stream_position_to_compact": source_partition.stream_position,
260
+ "list_deltas_kwargs": {**ds_mock_kwargs, **{"equivalent_table_types": []}},
261
+ "object_store": RayPlasmaObjectStore(),
262
+ "pg_config": pgm,
263
+ "primary_keys": primary_keys,
264
+ "read_kwargs_provider": read_kwargs_provider_param,
265
+ "rebase_source_partition_locator": source_partition.locator,
266
+ "rebase_source_partition_high_watermark": rebased_partition.stream_position,
267
+ "records_per_compacted_file": records_per_compacted_file_param,
268
+ "s3_client_kwargs": {},
269
+ "source_partition_locator": rebased_partition.locator,
270
+ "sort_keys": sort_keys if sort_keys else None,
271
+ "num_rounds": num_rounds_param,
272
+ "drop_duplicates": drop_duplicates_param,
273
+ "min_delta_bytes": 560,
274
+ }
275
+ )
276
+ if expected_terminal_exception:
277
+ with pytest.raises(expected_terminal_exception) as exc_info:
278
+ benchmark(compact_partition_func, compact_partition_params)
279
+ assert expected_terminal_exception_message in str(exc_info.value)
280
+ return
281
+ from deltacat.compute.compactor_v2.model.evaluate_compaction_result import (
282
+ ExecutionCompactionResult,
283
+ )
284
+
285
+ execute_compaction_result_spy = mocker.spy(ExecutionCompactionResult, "__init__")
286
+
287
+ # execute
288
+ rcf_file_s3_uri = benchmark(compact_partition_func, compact_partition_params)
289
+
290
+ round_completion_info: RoundCompletionInfo = get_rcf(s3_resource, rcf_file_s3_uri)
291
+ audit_bucket, audit_key = RoundCompletionInfo.get_audit_bucket_name_and_key(
292
+ round_completion_info.compaction_audit_url
293
+ )
294
+
295
+ compaction_audit_obj: Dict[str, Any] = read_s3_contents(
296
+ s3_resource, audit_bucket, audit_key
297
+ )
298
+ compaction_audit: CompactionSessionAuditInfo = CompactionSessionAuditInfo(
299
+ **compaction_audit_obj
300
+ )
301
+
302
+ # Assert not in-place compacted
303
+ assert (
304
+ execute_compaction_result_spy.call_args.args[-1] is False
305
+ ), "Table version erroneously marked as in-place compacted!"
306
+ compacted_delta_locator: DeltaLocator = get_compacted_delta_locator_from_rcf(
307
+ s3_resource, rcf_file_s3_uri
308
+ )
309
+ tables = ds.download_delta(
310
+ compacted_delta_locator, storage_type=StorageType.LOCAL, **ds_mock_kwargs
311
+ )
312
+ actual_rebase_compacted_table = pa.concat_tables(tables)
313
+ # if no primary key is specified then sort by sort_key for consistent assertion
314
+ sorting_cols: List[Any] = (
315
+ [(val, "ascending") for val in primary_keys] if primary_keys else sort_keys
316
+ )
317
+ rebase_expected_compact_partition_result = (
318
+ rebase_expected_compact_partition_result.combine_chunks().sort_by(sorting_cols)
319
+ )
320
+ actual_rebase_compacted_table = (
321
+ actual_rebase_compacted_table.combine_chunks().sort_by(sorting_cols)
322
+ )
323
+ assert actual_rebase_compacted_table.equals(
324
+ rebase_expected_compact_partition_result
325
+ ), f"{actual_rebase_compacted_table} does not match {rebase_expected_compact_partition_result}"
326
+
327
+ if assert_compaction_audit:
328
+ if not assert_compaction_audit(compactor_version, compaction_audit):
329
+ assert False, "Compaction audit assertion failed"
330
+ return
@@ -279,7 +279,7 @@ def test_compact_partition_rebase_same_source_and_destination(
279
279
  execute_compaction_result_spy = mocker.spy(ExecutionCompactionResult, "__init__")
280
280
 
281
281
  # execute
282
- rcf_file_s3_uri = compact_partition_func(compact_partition_params)
282
+ rcf_file_s3_uri = benchmark(compact_partition_func, compact_partition_params)
283
283
 
284
284
  round_completion_info: RoundCompletionInfo = get_rcf(s3_resource, rcf_file_s3_uri)
285
285
  audit_bucket, audit_key = RoundCompletionInfo.get_audit_bucket_name_and_key(
@@ -269,3 +269,121 @@ def create_src_w_deltas_destination_rebase_w_deltas_strategy(
269
269
  destination_table_stream,
270
270
  rebased_stream_after_committed,
271
271
  )
272
+
273
+
274
+ def multiple_rounds_create_src_w_deltas_destination_rebase_w_deltas_strategy(
275
+ primary_keys: Set[str],
276
+ sort_keys: Optional[List[Any]],
277
+ partition_keys: Optional[List[PartitionKey]],
278
+ input_deltas: List[pa.Table],
279
+ partition_values: Optional[List[Any]],
280
+ ds_mock_kwargs: Optional[Dict[str, Any]],
281
+ ) -> Tuple[Stream, Stream, Optional[Stream], bool]:
282
+ import deltacat.tests.local_deltacat_storage as ds
283
+ from deltacat.storage import Partition, Stream
284
+
285
+ source_namespace, source_table_name, source_table_version = create_src_table(
286
+ primary_keys, sort_keys, partition_keys, ds_mock_kwargs
287
+ )
288
+
289
+ source_table_stream: Stream = ds.get_stream(
290
+ namespace=source_namespace,
291
+ table_name=source_table_name,
292
+ table_version=source_table_version,
293
+ **ds_mock_kwargs,
294
+ )
295
+ staged_partition: Partition = ds.stage_partition(
296
+ source_table_stream, partition_values, **ds_mock_kwargs
297
+ )
298
+ is_delete = False
299
+ input_delta_length = 0
300
+ for (
301
+ input_delta,
302
+ input_delta_type,
303
+ input_delta_parameters,
304
+ ) in input_deltas:
305
+ if input_delta_type is DeltaType.DELETE:
306
+ is_delete = True
307
+ staged_delta = ds.stage_delta(
308
+ input_delta,
309
+ staged_partition,
310
+ input_delta_type,
311
+ delete_parameters=input_delta_parameters,
312
+ **ds_mock_kwargs,
313
+ )
314
+ ds.commit_delta(
315
+ staged_delta,
316
+ **ds_mock_kwargs,
317
+ )
318
+ input_delta_length += len(input_delta) if input_delta else 0
319
+ ds.commit_partition(staged_partition, **ds_mock_kwargs)
320
+ source_table_stream_after_committed: Stream = ds.get_stream(
321
+ namespace=source_namespace,
322
+ table_name=source_table_name,
323
+ table_version=source_table_version,
324
+ **ds_mock_kwargs,
325
+ )
326
+ # create the destination table
327
+ (
328
+ destination_table_namespace,
329
+ destination_table_name,
330
+ destination_table_version,
331
+ ) = create_destination_table(
332
+ primary_keys, sort_keys, partition_keys, ds_mock_kwargs
333
+ )
334
+ # create the rebase table
335
+ (
336
+ rebase_table_namespace,
337
+ rebase_table_name,
338
+ rebase_table_version,
339
+ ) = create_rebase_table(primary_keys, sort_keys, partition_keys, ds_mock_kwargs)
340
+ rebasing_table_stream: Stream = ds.get_stream(
341
+ namespace=rebase_table_namespace,
342
+ table_name=rebase_table_name,
343
+ table_version=rebase_table_version,
344
+ **ds_mock_kwargs,
345
+ )
346
+ staged_partition: Partition = ds.stage_partition(
347
+ rebasing_table_stream, partition_values, **ds_mock_kwargs
348
+ )
349
+ input_delta_length = 0
350
+ for (
351
+ input_delta,
352
+ input_delta_type,
353
+ input_delta_parameters,
354
+ ) in input_deltas:
355
+ if input_delta_type is DeltaType.DELETE:
356
+ is_delete = True
357
+ staged_delta = ds.stage_delta(
358
+ input_delta,
359
+ staged_partition,
360
+ input_delta_type,
361
+ delete_parameters=input_delta_parameters,
362
+ **ds_mock_kwargs,
363
+ )
364
+ ds.commit_delta(
365
+ staged_delta,
366
+ **ds_mock_kwargs,
367
+ )
368
+ input_delta_length += len(input_delta) if input_delta else 0
369
+ ds.commit_partition(staged_partition, **ds_mock_kwargs)
370
+
371
+ # get streams
372
+ destination_table_stream: Stream = ds.get_stream(
373
+ namespace=destination_table_namespace,
374
+ table_name=destination_table_name,
375
+ table_version=destination_table_version,
376
+ **ds_mock_kwargs,
377
+ )
378
+ rebased_stream_after_committed: Stream = ds.get_stream(
379
+ namespace=rebase_table_namespace,
380
+ table_name=rebase_table_name,
381
+ table_version=rebase_table_version,
382
+ **ds_mock_kwargs,
383
+ )
384
+ return (
385
+ source_table_stream_after_committed,
386
+ destination_table_stream,
387
+ rebased_stream_after_committed,
388
+ is_delete,
389
+ )
@@ -394,12 +394,13 @@ def download_delta(
394
394
  **kwargs,
395
395
  ) -> Union[LocalDataset, DistributedDataset]: # type: ignore
396
396
  result = []
397
- manifest = get_delta_manifest(delta_like, *args, **kwargs)
398
-
397
+ if isinstance(delta_like, Delta) and delta_like.manifest is not None:
398
+ manifest = Delta(delta_like).manifest
399
+ else:
400
+ manifest = get_delta_manifest(delta_like, *args, **kwargs)
399
401
  partition_values: PartitionValues = None
400
402
  if partition_filter is not None:
401
403
  partition_values = partition_filter.partition_values
402
-
403
404
  for entry_index in range(len(manifest.entries)):
404
405
  if (
405
406
  partition_values is not None
@@ -440,8 +441,10 @@ def download_delta_manifest_entry(
440
441
  **kwargs,
441
442
  ) -> LocalTable:
442
443
  cur, con = _get_sqlite3_cursor_con(kwargs)
443
-
444
- manifest = get_delta_manifest(delta_like, *args, **kwargs)
444
+ if isinstance(delta_like, Delta) and delta_like.manifest is not None:
445
+ manifest = Delta(delta_like).manifest
446
+ else:
447
+ manifest = get_delta_manifest(delta_like, *args, **kwargs)
445
448
  if entry_index >= len(manifest.entries):
446
449
  raise IndexError(
447
450
  f"Manifest entry index {entry_index} does not exist. "
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deltacat
3
- Version: 1.1.14
3
+ Version: 1.1.15
4
4
  Summary: A scalable, fast, ACID-compliant Data Catalog powered by Ray.
5
5
  Home-page: https://github.com/ray-project/deltacat
6
6
  Author: Ray Team
@@ -1,4 +1,4 @@
1
- deltacat/__init__.py,sha256=dvd9BOMviyQgIHFPVSN_kQV6dAuyud4WZ6kUJyuO9go,1778
1
+ deltacat/__init__.py,sha256=B3feGTJ_HURh5NXPYw8eS-uft2b2FuwzVsZjfVXCa5c,1778
2
2
  deltacat/constants.py,sha256=_6oRI-3yp5c8J1qKGQZrt89I9-ttT_gSSvVsJ0h8Duc,1939
3
3
  deltacat/exceptions.py,sha256=yWM4RXK7uRrQc1VgJv6Lv2UiNZWAx2wolLq7cBwjlkg,12770
4
4
  deltacat/logs.py,sha256=6g16VkEFidbaMjgenAjggE1r2l664drMVhreRs8B1IQ,8438
@@ -21,14 +21,14 @@ deltacat/catalog/model/catalog.py,sha256=-Ho7a3rV1hiOS9cSRCAor9AtXV9nJn9t_MDVql9
21
21
  deltacat/catalog/model/table_definition.py,sha256=tKrM1mmaQlvxqXrLt3QJVZK5BZfaJnhjTZ6KjybYlhE,727
22
22
  deltacat/compute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  deltacat/compute/compactor/__init__.py,sha256=ivpOPve1yKi3Vz3tVgp-eeFMNEeUSf-dlRJNSCM85sE,1022
24
- deltacat/compute/compactor/compaction_session.py,sha256=sGlSpfZaC_RYG2n8NGpT9z2X8V521nlLJktYtzafpmg,27715
24
+ deltacat/compute/compactor/compaction_session.py,sha256=YthBYNpj6qvr6SqfVfXTy5ylKFOo8zUKI3bn4tHt0e8,27766
25
25
  deltacat/compute/compactor/repartition_session.py,sha256=AAPwNZtPpC_Mtoja855_alBdXDA6efp7zcvkE-MANaQ,7254
26
26
  deltacat/compute/compactor/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- deltacat/compute/compactor/model/compact_partition_params.py,sha256=RuyYQVuoxKlt4vYTbVpCgoM6K8S_-TFhVuOnPVkxLfE,15850
28
- deltacat/compute/compactor/model/compaction_session_audit_info.py,sha256=Aoae5KNmbdYt48utFQR_zrjHTkC9JNd4jPhQmyJji-A,30547
27
+ deltacat/compute/compactor/model/compact_partition_params.py,sha256=MOgSmprPw6AN4u0CIDrFTzKwuJEE3QgTkdGcvJwdKVA,16076
28
+ deltacat/compute/compactor/model/compaction_session_audit_info.py,sha256=3BipvaREfk4l0DjdkH1ryy1E46NQdyYi33DPv3O5i7U,30462
29
29
  deltacat/compute/compactor/model/compactor_version.py,sha256=RwRvManiCxZmzjAWzm1OPDxjB1BEHu1d0fBJyGhXKxA,87
30
30
  deltacat/compute/compactor/model/dedupe_result.py,sha256=1OCV944qJdLQ_-8scisVKl45ej1eRv9OV539QYZtQ-U,292
31
- deltacat/compute/compactor/model/delta_annotated.py,sha256=NERB9rOtYg-xzBwvqGJ7_hBOzBC7g6X5M9-Cq5pbdH8,12258
31
+ deltacat/compute/compactor/model/delta_annotated.py,sha256=NmL1Dgso1OLenduGSmIrFf_IE5n4sbAolrch8ry5ABc,12230
32
32
  deltacat/compute/compactor/model/delta_file_envelope.py,sha256=6P-3qM4HE1dIGqbKmiyk8cyJAJD1WbwnN22_ppQocHc,3676
33
33
  deltacat/compute/compactor/model/delta_file_locator.py,sha256=AmhPGPDsmahVhp91rohJMx4ByumcIY5feqRLZTrNu4s,1905
34
34
  deltacat/compute/compactor/model/hash_bucket_result.py,sha256=71qGmaT1Mks-r3-aatjNbn2x3yWIgT8RmV0bRWe6pdA,275
@@ -40,7 +40,7 @@ deltacat/compute/compactor/model/round_completion_info.py,sha256=SGR6WeGBGwRNDz6
40
40
  deltacat/compute/compactor/model/table_object_store.py,sha256=7BsBsuV8TBudGzy_NfQc7QyzLIP0EXf04DvqaOJNeJE,1487
41
41
  deltacat/compute/compactor/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  deltacat/compute/compactor/steps/dedupe.py,sha256=iAPRIeMdGxNxaCy2QC_XzRWiNDVkKbkplJY0DVoWwsE,10190
43
- deltacat/compute/compactor/steps/hash_bucket.py,sha256=CbNbE0rizrsG-7rvB90J-iHtr7OajDat-4tyi2Ftz10,10655
43
+ deltacat/compute/compactor/steps/hash_bucket.py,sha256=r4DOf1M8brsloiVyOKyplSvFG72Ao86N7YaH2l4mwEk,10646
44
44
  deltacat/compute/compactor/steps/materialize.py,sha256=j2r01KL5GGhGss9FSN9vpYmgsCQdm2uUpKMDVPtk6_k,14246
45
45
  deltacat/compute/compactor/steps/repartition.py,sha256=_ITw4yvvnNv3wwOYxprzlIz5J6t3b72re6lllpzJD9U,10960
46
46
  deltacat/compute/compactor/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -50,8 +50,8 @@ deltacat/compute/compactor/utils/round_completion_file.py,sha256=_rl8lBSO9KFW07Z
50
50
  deltacat/compute/compactor/utils/sort_key.py,sha256=oK6otg-CSsma6zlGPaKg-KNEvcZRG2NqBlCw1X3_FBc,2397
51
51
  deltacat/compute/compactor/utils/system_columns.py,sha256=CNIgAGos0xAGEpdaQIH7KfbSRrGZgjRbItXMararqXQ,9399
52
52
  deltacat/compute/compactor_v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- deltacat/compute/compactor_v2/compaction_session.py,sha256=1V7EgtSF3gmqoaN6iRQ1Yw66Epvmlh2Hj6-y_rE83zI,7755
54
- deltacat/compute/compactor_v2/constants.py,sha256=RoVJb86km-0ghtEFB0z24H7yuCJCbQ2t7_-LuXFNYak,2304
53
+ deltacat/compute/compactor_v2/compaction_session.py,sha256=mRy7Rh2hIejKmfmVUXTbAD8ArUDRudDAY5YxlKV8dBM,8186
54
+ deltacat/compute/compactor_v2/constants.py,sha256=4HkSebuRWlAzOnZ-_nYmMsf6d3koTwfrlBx9KxuoGe4,2417
55
55
  deltacat/compute/compactor_v2/deletes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  deltacat/compute/compactor_v2/deletes/delete_file_envelope.py,sha256=AeuH9JRMwp6mvQf6P2cqL92hUEtResQq6qUTS0kIKac,3111
57
57
  deltacat/compute/compactor_v2/deletes/delete_strategy.py,sha256=SMEJOxR-5r92kvKNqtu2w6HmwtmhljcZX1wcNEuS-4w,2833
@@ -66,16 +66,16 @@ deltacat/compute/compactor_v2/model/merge_file_group.py,sha256=1o86t9lc3K6ZvtViV
66
66
  deltacat/compute/compactor_v2/model/merge_input.py,sha256=-SxTE0e67z2V7MiMEVz5aMu4E0k8h3-vqohvUUOC0do,5659
67
67
  deltacat/compute/compactor_v2/model/merge_result.py,sha256=_IZTCStpb4UKiRCJYA3g6EhAqjrw0t9vmoDAN8kIK-Y,436
68
68
  deltacat/compute/compactor_v2/private/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- deltacat/compute/compactor_v2/private/compaction_utils.py,sha256=3ukQx50xH810XJu1KzKdxY95lGuZGerHhHTJ89ns-jg,27622
69
+ deltacat/compute/compactor_v2/private/compaction_utils.py,sha256=B1i9y74gAhAQCu2vpjuN2muH425GHffnc2BhK-l6wQk,30061
70
70
  deltacat/compute/compactor_v2/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
71
  deltacat/compute/compactor_v2/steps/hash_bucket.py,sha256=1R5xLUkl7GqL1nY-apAgY1czKDEHjIVYSRi9qLOMass,6726
72
- deltacat/compute/compactor_v2/steps/merge.py,sha256=ukCn312igxq7jNiCn7a2Vzk309LKdYZ902HTcEZhjM4,21774
72
+ deltacat/compute/compactor_v2/steps/merge.py,sha256=LpktsDPfj7Of6RgUw9w1f3Y3OBkPDjvtyXjzFaIDoSo,21771
73
73
  deltacat/compute/compactor_v2/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  deltacat/compute/compactor_v2/utils/content_type_params.py,sha256=rNKZisxGrLQOkwX8eHUQiFoTR1V-E66pMqWigtrs618,2156
75
75
  deltacat/compute/compactor_v2/utils/dedupe.py,sha256=62tFCY2iRP7I3-45GCIYs6_SJsQl8C5lBEr8gbNfbsw,1932
76
- deltacat/compute/compactor_v2/utils/delta.py,sha256=8hjkDeIIkSX-gAQ2utQSp2sZcO2tWZHMTxpFusZwBHw,3635
77
- deltacat/compute/compactor_v2/utils/io.py,sha256=autXlE3uHICdCCuJoS7mfdeJbRRiz2_xlz-3izlccB4,5264
78
- deltacat/compute/compactor_v2/utils/merge.py,sha256=7UHxm71iJ1dgRoz8v73CqoeylNzO36t90OJsVVBDFxk,5312
76
+ deltacat/compute/compactor_v2/utils/delta.py,sha256=I7Yvda8NVbpKXG3nM2Ku1utvR2r2OpHvUMqUL2ja3aw,3626
77
+ deltacat/compute/compactor_v2/utils/io.py,sha256=5zwJEW_UHv9ttQ2exJ23ZnExwBQXn1KgN7FDx1MGYv0,5262
78
+ deltacat/compute/compactor_v2/utils/merge.py,sha256=EV_iKhNc3WflgfLW1Q46dXUvyClx8VebWHGtninEfsI,5311
79
79
  deltacat/compute/compactor_v2/utils/primary_key_index.py,sha256=ghyIifjXtqXgi8lN3lfnVQ2vi8uk_ny0FE7hsQlLjRQ,11538
80
80
  deltacat/compute/compactor_v2/utils/task_options.py,sha256=VXvoVVUq5re8NiOoyrfz34qSRiOTB0IkxHJlMqKsBmk,14066
81
81
  deltacat/compute/merge_on_read/__init__.py,sha256=ckbgngmqPjYBYz_NySsR1vNTOb_hNpeL1sYkZKvBI9M,214
@@ -145,16 +145,18 @@ deltacat/tests/aws/test_s3u.py,sha256=FsYCH8K8DsDRPOtTp-w1Nu3ATqt4p1mqDo6aVJV-Sb
145
145
  deltacat/tests/catalog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
146
  deltacat/tests/catalog/test_default_catalog_impl.py,sha256=2l5uwmtLlUJ9yH1LDggtj81fa-pHqbE0-VBt6G4Hyc0,3180
147
147
  deltacat/tests/compute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
+ deltacat/tests/compute/compact_partition_multiple_rounds_test_cases.py,sha256=vyqwuKYOb4FtRwC5r1SJf7kcZNYXoiGb-BUrBgr5_Xw,34852
148
149
  deltacat/tests/compute/compact_partition_rebase_test_cases.py,sha256=NfcB1aTq6HeYMFrtooIIoifzLp5U0xFTN6F7Lpk8cYQ,3143
149
150
  deltacat/tests/compute/compact_partition_rebase_then_incremental_test_cases.py,sha256=Kl5A7hoJ0pVOE-rZna_4XcuIjhuzQbJudvnfNYKHgGo,75436
150
151
  deltacat/tests/compute/compact_partition_test_cases.py,sha256=R9eiKvxCLqcoHjAx3iOogdnXZEO9TvLbRf0wA7bcJN4,26170
151
152
  deltacat/tests/compute/test_compact_partition_incremental.py,sha256=Z0hyQGhMZjCaOn1Vk4qUbgDiS7HDhtdNeFQyG1PJhqA,14559
153
+ deltacat/tests/compute/test_compact_partition_multiple_rounds.py,sha256=xhKCurTA29Y78_1eksUVJ0W35zNNZYm40rMpMM9ynvM,11853
152
154
  deltacat/tests/compute/test_compact_partition_params.py,sha256=Dm5eLyHo8oGMeO3XBbpj1rZqHtPZ1hAB7z2qvzc4Lxk,8497
153
- deltacat/tests/compute/test_compact_partition_rebase.py,sha256=hKMSQ-BQG6w0O_4TlzESY6pA5Ft5c5WSHLIFvj5hePI,11434
155
+ deltacat/tests/compute/test_compact_partition_rebase.py,sha256=p97zJmEoC2t6R12luSkCKjjBl50l4UGzh-IHdiQdpCs,11445
154
156
  deltacat/tests/compute/test_compact_partition_rebase_then_incremental.py,sha256=CHHfNFEJW8S1We7NE1Gg6EaoKEWnaOMRxWrLyirrahc,14643
155
157
  deltacat/tests/compute/test_util_common.py,sha256=oTkTuo6wscVN8hmoQASIKP_DJN-M0um_ySCOcXv9AJA,11699
156
158
  deltacat/tests/compute/test_util_constant.py,sha256=4o-W3E7r7jhFl1A3OFLLrdKnwcF46zx4lEIDY8ONJ3c,929
157
- deltacat/tests/compute/test_util_create_table_deltas_repo.py,sha256=oY7ZMrvooDVOkhoAJnfdLGO0ejQAwgkqKrt7UmgiObU,9037
159
+ deltacat/tests/compute/test_util_create_table_deltas_repo.py,sha256=k9lq_3r_kNMzruTSn4JE7yjdBBUT3Lh-l8khSYdYpYs,12945
158
160
  deltacat/tests/compute/compactor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
161
  deltacat/tests/compute/compactor/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
162
  deltacat/tests/compute/compactor/steps/test_repartition.py,sha256=0uRguPEKeLSYs746Jv8io-HZMWdyXNcOMBu8GO2mA0M,9305
@@ -162,7 +164,7 @@ deltacat/tests/compute/compactor/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JC
162
164
  deltacat/tests/compute/compactor/utils/test_io.py,sha256=st5mlU4cVU-eQl7B4mvPgNA3izuNwbVawYOp-NcoyrI,4326
163
165
  deltacat/tests/compute/compactor/utils/test_round_completion_file.py,sha256=LAQ4usiRF4oTx4cA85L0eOcBa_Z-febc-CuzUijSGrI,7439
164
166
  deltacat/tests/compute/compactor_v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
- deltacat/tests/compute/compactor_v2/test_compaction_session.py,sha256=2wIXQW0Jm_FtWB5EviUR6Uk2ddVCJKs-CYGKE1xSPu4,9617
167
+ deltacat/tests/compute/compactor_v2/test_compaction_session.py,sha256=X1B47USzXXGt-b_BL6WyFENOXx2aqp6NLIdL_gCukNw,9641
166
168
  deltacat/tests/compute/compactor_v2/test_hashlib.py,sha256=8csF2hFWtBvY2MbX3-6iphCsVXxRp0zP1NTnKhfdmkg,328
167
169
  deltacat/tests/compute/compactor_v2/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
170
  deltacat/tests/compute/compactor_v2/utils/test_task_options.py,sha256=4fc5MJTLm3hFlFHK_-5MfyfzeZtOo8D2kBqDE2b8lh4,862
@@ -173,7 +175,7 @@ deltacat/tests/io/test_memcached_object_store.py,sha256=g2lOYSCH6JQvTzcrMOVvCabK
173
175
  deltacat/tests/io/test_ray_plasma_object_store.py,sha256=-wJZP6lRtEOogR25wjEiIBGz_lpvWVihwlZ5GqandZU,1911
174
176
  deltacat/tests/io/test_redis_object_store.py,sha256=sZrXrYjkw8u_XrvFilhBbLc8PPnZiuMKa1_Bt9ka5qs,3838
175
177
  deltacat/tests/io/test_s3_object_store.py,sha256=4b7PYEfQJnYGUz6fcLFWVVyRHTlH_yd8CIaCv9l33Gg,1900
176
- deltacat/tests/local_deltacat_storage/__init__.py,sha256=jRJH0eqtH43bEJl1G18nDykZSZM_N4jmKPzmcpIkzmE,39839
178
+ deltacat/tests/local_deltacat_storage/__init__.py,sha256=5T9ubNIS42-BotEH0yrUiWEU92feW7lkoSA1-wMeAnQ,40104
177
179
  deltacat/tests/local_deltacat_storage/exceptions.py,sha256=oxZ0psmrEO0M6P2r8gHQ2E8E-Y8UBfUCBUIwfuHcx38,251
178
180
  deltacat/tests/stats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
181
  deltacat/tests/stats/test_intervals.py,sha256=S92DgkALQ1WmbLWcxtvS7RlVGvL-XoPJKUUbkdn9_CQ,1955
@@ -218,8 +220,8 @@ deltacat/utils/ray_utils/concurrency.py,sha256=JDVwMiQWrmuSlyCWAoiq9ctoJ0XADEfDD
218
220
  deltacat/utils/ray_utils/dataset.py,sha256=waHdtH0c835a-2t51HYRHnulfC0_zBxx8mFSAPvPSPM,3274
219
221
  deltacat/utils/ray_utils/performance.py,sha256=d7JFM7vTXHzkGx9qNQcZzUWajnqINvYRwaM088_FpsE,464
220
222
  deltacat/utils/ray_utils/runtime.py,sha256=rB0A-tU9WZHz0J11LzJdANYtL397YyuemcA1l-K9dAw,5029
221
- deltacat-1.1.14.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
222
- deltacat-1.1.14.dist-info/METADATA,sha256=orKTHhgUb74RXGlgcKhu-M36EmYd3-41AH7V1IP2jEI,1734
223
- deltacat-1.1.14.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
224
- deltacat-1.1.14.dist-info/top_level.txt,sha256=RWdIcid4Bv2i2ozLVh-70kJpyB61xEKXod9XXGpiono,9
225
- deltacat-1.1.14.dist-info/RECORD,,
223
+ deltacat-1.1.15.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
224
+ deltacat-1.1.15.dist-info/METADATA,sha256=KT4i-8YvQv2xdRV4DsIF7Htj5U-mJEsY68uornP81hg,1734
225
+ deltacat-1.1.15.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
226
+ deltacat-1.1.15.dist-info/top_level.txt,sha256=RWdIcid4Bv2i2ozLVh-70kJpyB61xEKXod9XXGpiono,9
227
+ deltacat-1.1.15.dist-info/RECORD,,