deltacat 1.1.13__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 (25) 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/__init__.py +0 -0
  10. deltacat/compute/compactor_v2/private/compaction_utils.py +753 -0
  11. deltacat/compute/compactor_v2/steps/merge.py +0 -3
  12. deltacat/compute/compactor_v2/utils/delta.py +2 -3
  13. deltacat/compute/compactor_v2/utils/io.py +0 -2
  14. deltacat/compute/compactor_v2/utils/merge.py +0 -1
  15. deltacat/tests/compute/compact_partition_multiple_rounds_test_cases.py +855 -0
  16. deltacat/tests/compute/compactor_v2/test_compaction_session.py +1 -1
  17. deltacat/tests/compute/test_compact_partition_multiple_rounds.py +330 -0
  18. deltacat/tests/compute/test_compact_partition_rebase.py +1 -1
  19. deltacat/tests/compute/test_util_create_table_deltas_repo.py +118 -0
  20. deltacat/tests/local_deltacat_storage/__init__.py +8 -5
  21. {deltacat-1.1.13.dist-info → deltacat-1.1.15.dist-info}/METADATA +1 -1
  22. {deltacat-1.1.13.dist-info → deltacat-1.1.15.dist-info}/RECORD +25 -21
  23. {deltacat-1.1.13.dist-info → deltacat-1.1.15.dist-info}/LICENSE +0 -0
  24. {deltacat-1.1.13.dist-info → deltacat-1.1.15.dist-info}/WHEEL +0 -0
  25. {deltacat-1.1.13.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.13
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=v91QDtZ0JmhMu7T4rGn0ioNLAMn-0Ha7zC-0EACz2LM,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
@@ -65,15 +65,17 @@ deltacat/compute/compactor_v2/model/hash_bucket_result.py,sha256=EsY9BPPywhmxlcL
65
65
  deltacat/compute/compactor_v2/model/merge_file_group.py,sha256=1o86t9lc3K6ZvtViVO1SVljCj6f0B3MfB3hqtGm2S0s,7410
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
+ deltacat/compute/compactor_v2/private/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ deltacat/compute/compactor_v2/private/compaction_utils.py,sha256=B1i9y74gAhAQCu2vpjuN2muH425GHffnc2BhK-l6wQk,30061
68
70
  deltacat/compute/compactor_v2/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
71
  deltacat/compute/compactor_v2/steps/hash_bucket.py,sha256=1R5xLUkl7GqL1nY-apAgY1czKDEHjIVYSRi9qLOMass,6726
70
- deltacat/compute/compactor_v2/steps/merge.py,sha256=ukCn312igxq7jNiCn7a2Vzk309LKdYZ902HTcEZhjM4,21774
72
+ deltacat/compute/compactor_v2/steps/merge.py,sha256=LpktsDPfj7Of6RgUw9w1f3Y3OBkPDjvtyXjzFaIDoSo,21771
71
73
  deltacat/compute/compactor_v2/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
74
  deltacat/compute/compactor_v2/utils/content_type_params.py,sha256=rNKZisxGrLQOkwX8eHUQiFoTR1V-E66pMqWigtrs618,2156
73
75
  deltacat/compute/compactor_v2/utils/dedupe.py,sha256=62tFCY2iRP7I3-45GCIYs6_SJsQl8C5lBEr8gbNfbsw,1932
74
- deltacat/compute/compactor_v2/utils/delta.py,sha256=8hjkDeIIkSX-gAQ2utQSp2sZcO2tWZHMTxpFusZwBHw,3635
75
- deltacat/compute/compactor_v2/utils/io.py,sha256=autXlE3uHICdCCuJoS7mfdeJbRRiz2_xlz-3izlccB4,5264
76
- 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
77
79
  deltacat/compute/compactor_v2/utils/primary_key_index.py,sha256=ghyIifjXtqXgi8lN3lfnVQ2vi8uk_ny0FE7hsQlLjRQ,11538
78
80
  deltacat/compute/compactor_v2/utils/task_options.py,sha256=VXvoVVUq5re8NiOoyrfz34qSRiOTB0IkxHJlMqKsBmk,14066
79
81
  deltacat/compute/merge_on_read/__init__.py,sha256=ckbgngmqPjYBYz_NySsR1vNTOb_hNpeL1sYkZKvBI9M,214
@@ -143,16 +145,18 @@ deltacat/tests/aws/test_s3u.py,sha256=FsYCH8K8DsDRPOtTp-w1Nu3ATqt4p1mqDo6aVJV-Sb
143
145
  deltacat/tests/catalog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
146
  deltacat/tests/catalog/test_default_catalog_impl.py,sha256=2l5uwmtLlUJ9yH1LDggtj81fa-pHqbE0-VBt6G4Hyc0,3180
145
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
146
149
  deltacat/tests/compute/compact_partition_rebase_test_cases.py,sha256=NfcB1aTq6HeYMFrtooIIoifzLp5U0xFTN6F7Lpk8cYQ,3143
147
150
  deltacat/tests/compute/compact_partition_rebase_then_incremental_test_cases.py,sha256=Kl5A7hoJ0pVOE-rZna_4XcuIjhuzQbJudvnfNYKHgGo,75436
148
151
  deltacat/tests/compute/compact_partition_test_cases.py,sha256=R9eiKvxCLqcoHjAx3iOogdnXZEO9TvLbRf0wA7bcJN4,26170
149
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
150
154
  deltacat/tests/compute/test_compact_partition_params.py,sha256=Dm5eLyHo8oGMeO3XBbpj1rZqHtPZ1hAB7z2qvzc4Lxk,8497
151
- 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
152
156
  deltacat/tests/compute/test_compact_partition_rebase_then_incremental.py,sha256=CHHfNFEJW8S1We7NE1Gg6EaoKEWnaOMRxWrLyirrahc,14643
153
157
  deltacat/tests/compute/test_util_common.py,sha256=oTkTuo6wscVN8hmoQASIKP_DJN-M0um_ySCOcXv9AJA,11699
154
158
  deltacat/tests/compute/test_util_constant.py,sha256=4o-W3E7r7jhFl1A3OFLLrdKnwcF46zx4lEIDY8ONJ3c,929
155
- 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
156
160
  deltacat/tests/compute/compactor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
161
  deltacat/tests/compute/compactor/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
162
  deltacat/tests/compute/compactor/steps/test_repartition.py,sha256=0uRguPEKeLSYs746Jv8io-HZMWdyXNcOMBu8GO2mA0M,9305
@@ -160,7 +164,7 @@ deltacat/tests/compute/compactor/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JC
160
164
  deltacat/tests/compute/compactor/utils/test_io.py,sha256=st5mlU4cVU-eQl7B4mvPgNA3izuNwbVawYOp-NcoyrI,4326
161
165
  deltacat/tests/compute/compactor/utils/test_round_completion_file.py,sha256=LAQ4usiRF4oTx4cA85L0eOcBa_Z-febc-CuzUijSGrI,7439
162
166
  deltacat/tests/compute/compactor_v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
- 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
164
168
  deltacat/tests/compute/compactor_v2/test_hashlib.py,sha256=8csF2hFWtBvY2MbX3-6iphCsVXxRp0zP1NTnKhfdmkg,328
165
169
  deltacat/tests/compute/compactor_v2/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
170
  deltacat/tests/compute/compactor_v2/utils/test_task_options.py,sha256=4fc5MJTLm3hFlFHK_-5MfyfzeZtOo8D2kBqDE2b8lh4,862
@@ -171,7 +175,7 @@ deltacat/tests/io/test_memcached_object_store.py,sha256=g2lOYSCH6JQvTzcrMOVvCabK
171
175
  deltacat/tests/io/test_ray_plasma_object_store.py,sha256=-wJZP6lRtEOogR25wjEiIBGz_lpvWVihwlZ5GqandZU,1911
172
176
  deltacat/tests/io/test_redis_object_store.py,sha256=sZrXrYjkw8u_XrvFilhBbLc8PPnZiuMKa1_Bt9ka5qs,3838
173
177
  deltacat/tests/io/test_s3_object_store.py,sha256=4b7PYEfQJnYGUz6fcLFWVVyRHTlH_yd8CIaCv9l33Gg,1900
174
- deltacat/tests/local_deltacat_storage/__init__.py,sha256=jRJH0eqtH43bEJl1G18nDykZSZM_N4jmKPzmcpIkzmE,39839
178
+ deltacat/tests/local_deltacat_storage/__init__.py,sha256=5T9ubNIS42-BotEH0yrUiWEU92feW7lkoSA1-wMeAnQ,40104
175
179
  deltacat/tests/local_deltacat_storage/exceptions.py,sha256=oxZ0psmrEO0M6P2r8gHQ2E8E-Y8UBfUCBUIwfuHcx38,251
176
180
  deltacat/tests/stats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
181
  deltacat/tests/stats/test_intervals.py,sha256=S92DgkALQ1WmbLWcxtvS7RlVGvL-XoPJKUUbkdn9_CQ,1955
@@ -216,8 +220,8 @@ deltacat/utils/ray_utils/concurrency.py,sha256=JDVwMiQWrmuSlyCWAoiq9ctoJ0XADEfDD
216
220
  deltacat/utils/ray_utils/dataset.py,sha256=waHdtH0c835a-2t51HYRHnulfC0_zBxx8mFSAPvPSPM,3274
217
221
  deltacat/utils/ray_utils/performance.py,sha256=d7JFM7vTXHzkGx9qNQcZzUWajnqINvYRwaM088_FpsE,464
218
222
  deltacat/utils/ray_utils/runtime.py,sha256=rB0A-tU9WZHz0J11LzJdANYtL397YyuemcA1l-K9dAw,5029
219
- deltacat-1.1.13.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
220
- deltacat-1.1.13.dist-info/METADATA,sha256=vkq5iB16UJ0Ziot6trDCmsRgfKLoKmU_TC8B33M7qLs,1734
221
- deltacat-1.1.13.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
222
- deltacat-1.1.13.dist-info/top_level.txt,sha256=RWdIcid4Bv2i2ozLVh-70kJpyB61xEKXod9XXGpiono,9
223
- deltacat-1.1.13.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,,