deltacat 1.1.5__py3-none-any.whl → 1.1.7__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 (28) hide show
  1. deltacat/__init__.py +1 -1
  2. deltacat/aws/constants.py +21 -2
  3. deltacat/aws/s3u.py +107 -33
  4. deltacat/compute/compactor/model/round_completion_info.py +4 -0
  5. deltacat/compute/compactor_v2/compaction_session.py +51 -25
  6. deltacat/compute/compactor_v2/constants.py +12 -0
  7. deltacat/compute/compactor_v2/model/compaction_session.py +21 -0
  8. deltacat/compute/compactor_v2/steps/hash_bucket.py +6 -0
  9. deltacat/compute/compactor_v2/steps/merge.py +6 -0
  10. deltacat/compute/compactor_v2/utils/task_options.py +8 -2
  11. deltacat/storage/interface.py +10 -3
  12. deltacat/tests/aws/test_s3u.py +193 -0
  13. deltacat/tests/catalog/test_default_catalog_impl.py +2 -0
  14. deltacat/tests/compute/compact_partition_test_cases.py +61 -0
  15. deltacat/tests/compute/compactor_v2/test_compaction_session.py +2 -0
  16. deltacat/tests/compute/test_compact_partition_incremental.py +89 -32
  17. deltacat/tests/compute/test_compact_partition_rebase_then_incremental.py +21 -26
  18. deltacat/tests/compute/test_util_create_table_deltas_repo.py +45 -2
  19. deltacat/tests/local_deltacat_storage/__init__.py +38 -19
  20. deltacat/tests/utils/ray_utils/__init__.py +0 -0
  21. deltacat/tests/utils/ray_utils/test_concurrency.py +50 -0
  22. deltacat/tests/utils/test_resources.py +28 -0
  23. deltacat/utils/resources.py +45 -0
  24. {deltacat-1.1.5.dist-info → deltacat-1.1.7.dist-info}/METADATA +1 -1
  25. {deltacat-1.1.5.dist-info → deltacat-1.1.7.dist-info}/RECORD +28 -25
  26. {deltacat-1.1.5.dist-info → deltacat-1.1.7.dist-info}/LICENSE +0 -0
  27. {deltacat-1.1.5.dist-info → deltacat-1.1.7.dist-info}/WHEEL +0 -0
  28. {deltacat-1.1.5.dist-info → deltacat-1.1.7.dist-info}/top_level.txt +0 -0
@@ -37,6 +37,19 @@ from typing import Any, Callable, Dict, List, Optional, Set, Tuple
37
37
  from deltacat.types.media import StorageType
38
38
  from deltacat.storage import (
39
39
  DeltaType,
40
+ DeltaLocator,
41
+ Partition,
42
+ PartitionLocator,
43
+ )
44
+ from deltacat.types.media import ContentType
45
+ from deltacat.compute.compactor.model.compact_partition_params import (
46
+ CompactPartitionParams,
47
+ )
48
+ from deltacat.utils.placement import (
49
+ PlacementGroupManager,
50
+ )
51
+ from deltacat.compute.compactor.model.compaction_session_audit_info import (
52
+ CompactionSessionAuditInfo,
40
53
  )
41
54
 
42
55
  DATABASE_FILE_PATH_KEY, DATABASE_FILE_PATH_VALUE = (
@@ -54,6 +67,7 @@ MODULE scoped fixtures
54
67
  def setup_ray_cluster():
55
68
  ray.init(local_mode=True, ignore_reinit_error=True)
56
69
  yield
70
+ ray.shutdown()
57
71
 
58
72
 
59
73
  @pytest.fixture(autouse=True, scope="module")
@@ -74,14 +88,14 @@ def cleanup_the_database_file_after_all_compaction_session_package_tests_complet
74
88
 
75
89
 
76
90
  @pytest.fixture(scope="module")
77
- def setup_s3_resource(mock_aws_credential):
91
+ def s3_resource(mock_aws_credential):
78
92
  with mock_s3():
79
93
  yield boto3.resource("s3")
80
94
 
81
95
 
82
96
  @pytest.fixture(autouse=True, scope="module")
83
- def setup_compaction_artifacts_s3_bucket(setup_s3_resource: ServiceResource):
84
- setup_s3_resource.create_bucket(
97
+ def setup_compaction_artifacts_s3_bucket(s3_resource: ServiceResource):
98
+ s3_resource.create_bucket(
85
99
  ACL="authenticated-read",
86
100
  Bucket=TEST_S3_RCF_BUCKET_NAME,
87
101
  )
@@ -172,7 +186,7 @@ def local_deltacat_storage_kwargs(request: pytest.FixtureRequest):
172
186
  ids=[test_name for test_name in REBASE_THEN_INCREMENTAL_TEST_CASES],
173
187
  )
174
188
  def test_compact_partition_rebase_then_incremental(
175
- setup_s3_resource: ServiceResource,
189
+ s3_resource: ServiceResource,
176
190
  local_deltacat_storage_kwargs: Dict[str, Any],
177
191
  test_name: str,
178
192
  primary_keys: Set[str],
@@ -196,25 +210,8 @@ def test_compact_partition_rebase_then_incremental(
196
210
  benchmark: BenchmarkFixture,
197
211
  ):
198
212
  import deltacat.tests.local_deltacat_storage as ds
199
- from deltacat.types.media import ContentType
200
- from deltacat.storage import (
201
- DeltaLocator,
202
- Partition,
203
- PartitionLocator,
204
- )
205
- from deltacat.compute.compactor.model.compact_partition_params import (
206
- CompactPartitionParams,
207
- )
208
- from deltacat.utils.placement import (
209
- PlacementGroupManager,
210
- )
211
- from deltacat.compute.compactor.model.compaction_session_audit_info import (
212
- CompactionSessionAuditInfo,
213
- )
214
213
 
215
214
  ds_mock_kwargs = local_deltacat_storage_kwargs
216
- ray.shutdown()
217
- ray.init(local_mode=True, ignore_reinit_error=True)
218
215
  """
219
216
  REBASE
220
217
  """
@@ -280,7 +277,7 @@ def test_compact_partition_rebase_then_incremental(
280
277
  # execute
281
278
  rcf_file_s3_uri = benchmark(compact_partition_func, compact_partition_params)
282
279
  compacted_delta_locator: DeltaLocator = get_compacted_delta_locator_from_rcf(
283
- setup_s3_resource, rcf_file_s3_uri
280
+ s3_resource, rcf_file_s3_uri
284
281
  )
285
282
  tables = ds.download_delta(
286
283
  compacted_delta_locator, storage_type=StorageType.LOCAL, **ds_mock_kwargs
@@ -346,16 +343,14 @@ def test_compact_partition_rebase_then_incremental(
346
343
  assert expected_terminal_exception_message in str(exc_info.value)
347
344
  return
348
345
  rcf_file_s3_uri = compact_partition_func(compact_partition_params)
349
- round_completion_info = get_rcf(setup_s3_resource, rcf_file_s3_uri)
346
+ round_completion_info = get_rcf(s3_resource, rcf_file_s3_uri)
350
347
  compacted_delta_locator_incremental: DeltaLocator = (
351
348
  round_completion_info.compacted_delta_locator
352
349
  )
353
350
  audit_bucket, audit_key = round_completion_info.compaction_audit_url.replace(
354
351
  "s3://", ""
355
352
  ).split("/", 1)
356
- compaction_audit_obj: dict = read_s3_contents(
357
- setup_s3_resource, audit_bucket, audit_key
358
- )
353
+ compaction_audit_obj: dict = read_s3_contents(s3_resource, audit_bucket, audit_key)
359
354
  compaction_audit: CompactionSessionAuditInfo = CompactionSessionAuditInfo(
360
355
  **compaction_audit_obj
361
356
  )
@@ -19,6 +19,42 @@ from deltacat.tests.compute.test_util_common import (
19
19
  create_destination_table,
20
20
  create_rebase_table,
21
21
  )
22
+ import logging
23
+ from deltacat import logs
24
+
25
+ logger = logs.configure_deltacat_logger(logging.getLogger(__name__))
26
+
27
+
28
+ def _add_deltas_to_partition(
29
+ deltas_ingredients: List[Tuple[pa.Table, DeltaType, Optional[Dict[str, str]]]],
30
+ partition: Optional[Partition],
31
+ ds_mock_kwargs: Optional[Dict[str, Any]],
32
+ ) -> List[Optional[Delta], int]:
33
+ import deltacat.tests.local_deltacat_storage as ds
34
+
35
+ all_deltas_length = 0
36
+ for (delta_data, delta_type, delete_parameters) in deltas_ingredients:
37
+ staged_delta: Delta = ds.stage_delta(
38
+ delta_data,
39
+ partition,
40
+ delta_type,
41
+ delete_parameters=delete_parameters,
42
+ **ds_mock_kwargs,
43
+ )
44
+ incremental_delta = ds.commit_delta(
45
+ staged_delta,
46
+ **ds_mock_kwargs,
47
+ )
48
+ all_deltas_length += len(delta_data) if delta_data else 0
49
+ return incremental_delta, all_deltas_length
50
+
51
+
52
+ def add_late_deltas_to_partition(
53
+ late_deltas: List[Tuple[pa.Table, DeltaType, Optional[Dict[str, str]]]],
54
+ source_partition: Optional[Partition],
55
+ ds_mock_kwargs: Optional[Dict[str, Any]],
56
+ ) -> List[Optional[Delta], int]:
57
+ return _add_deltas_to_partition(late_deltas, source_partition, ds_mock_kwargs)
22
58
 
23
59
 
24
60
  def create_incremental_deltas_on_source_table(
@@ -85,7 +121,7 @@ def create_src_w_deltas_destination_plus_destination(
85
121
  partition_values: Optional[List[Any]],
86
122
  ds_mock_kwargs: Optional[Dict[str, Any]],
87
123
  simulate_is_inplace: bool = False,
88
- ) -> Tuple[Stream, Stream, Optional[Stream]]:
124
+ ) -> Tuple[Stream, Stream, Optional[Stream], str, str, str]:
89
125
  import deltacat.tests.local_deltacat_storage as ds
90
126
 
91
127
  source_namespace, source_table_name, source_table_version = create_src_table(
@@ -137,7 +173,14 @@ def create_src_w_deltas_destination_plus_destination(
137
173
  table_version=destination_table_version,
138
174
  **ds_mock_kwargs,
139
175
  )
140
- return source_table_stream_after_committed, destination_table_stream, None
176
+ return (
177
+ source_table_stream_after_committed,
178
+ destination_table_stream,
179
+ None,
180
+ source_namespace,
181
+ source_table_name,
182
+ source_table_version,
183
+ )
141
184
 
142
185
 
143
186
  def create_src_w_deltas_destination_rebase_w_deltas_strategy(
@@ -271,9 +271,7 @@ def list_partition_deltas(
271
271
  if not include_manifest:
272
272
  current_delta.manifest = None
273
273
 
274
- result.sort(
275
- reverse=True if not ascending_order else False, key=lambda d: d.stream_position
276
- )
274
+ result.sort(reverse=(not ascending_order), key=lambda d: d.stream_position)
277
275
  return ListResult.of(result, None, None)
278
276
 
279
277
 
@@ -798,33 +796,57 @@ def stage_partition(
798
796
  return partition
799
797
 
800
798
 
801
- def commit_partition(partition: Partition, *args, **kwargs) -> Partition:
799
+ def commit_partition(
800
+ partition: Partition,
801
+ previous_partition: Optional[Partition] = None,
802
+ *args,
803
+ **kwargs,
804
+ ) -> Partition:
802
805
  cur, con = _get_sqlite3_cursor_con(kwargs)
803
- pv_partition = get_partition(
806
+ pv_partition: Optional[Partition] = previous_partition or get_partition(
804
807
  partition.stream_locator,
805
808
  partition_values=partition.partition_values,
806
809
  *args,
807
810
  **kwargs,
808
811
  )
809
-
810
- # deprecate old and commit new one
812
+ # deprecate old partition and commit new one
811
813
  if pv_partition:
812
814
  pv_partition.state = CommitState.DEPRECATED
813
815
  params = (json.dumps(pv_partition), pv_partition.locator.canonical_string())
814
816
  cur.execute("UPDATE partitions SET value = ? WHERE locator = ?", params)
815
-
816
- deltas = list_partition_deltas(partition, *args, **kwargs).all_items()
817
- deltas.sort(reverse=True, key=lambda x: x.stream_position)
818
-
819
- stream_position = partition.stream_position
820
- if deltas:
821
- stream_position = deltas[0].stream_position
817
+ previous_partition_deltas = (
818
+ list_partition_deltas(
819
+ pv_partition, ascending_order=False, *args, **kwargs
820
+ ).all_items()
821
+ or []
822
+ )
823
+ partition_deltas: Optional[List[Delta]] = (
824
+ list_partition_deltas(
825
+ partition, ascending_order=False, *args, **kwargs
826
+ ).all_items()
827
+ or []
828
+ )
829
+ previous_partition_deltas_spos_gt: List[Delta] = [
830
+ delta
831
+ for delta in previous_partition_deltas
832
+ if delta.stream_position > partition_deltas[0].stream_position
833
+ ]
834
+ # handle the case if the previous partition deltas have a greater stream position than the partition_delta
835
+ partition_deltas = previous_partition_deltas_spos_gt + partition_deltas
836
+
837
+ stream_position = (
838
+ partition_deltas[0].stream_position
839
+ if partition_deltas
840
+ else partition.stream_position
841
+ )
822
842
 
823
843
  partition.state = CommitState.COMMITTED
824
844
  partition.stream_position = stream_position
825
845
  partition.previous_stream_position = (
826
846
  pv_partition.stream_position if pv_partition else None
827
847
  )
848
+ if partition_deltas:
849
+ partition.locator = partition_deltas[0].partition_locator
828
850
  params = (json.dumps(partition), partition.locator.canonical_string())
829
851
  cur.execute("UPDATE partitions SET value = ? WHERE locator = ?", params)
830
852
  con.commit()
@@ -975,9 +997,8 @@ def stage_delta(
975
997
 
976
998
  def commit_delta(delta: Delta, *args, **kwargs) -> Delta:
977
999
  cur, con = _get_sqlite3_cursor_con(kwargs)
978
-
979
- if not delta.stream_position:
980
- delta.locator.stream_position = current_time_ms()
1000
+ delta_stream_position: Optional[int] = delta.stream_position
1001
+ delta.locator.stream_position = delta_stream_position or current_time_ms()
981
1002
 
982
1003
  params = (
983
1004
  delta.locator.canonical_string(),
@@ -995,9 +1016,7 @@ def commit_delta(delta: Delta, *args, **kwargs) -> Delta:
995
1016
  cur.execute(
996
1017
  "UPDATE deltas SET partition_locator = ?, value = ? WHERE locator = ?", params
997
1018
  )
998
-
999
1019
  con.commit()
1000
-
1001
1020
  return delta
1002
1021
 
1003
1022
 
File without changes
@@ -0,0 +1,50 @@
1
+ from unittest import TestCase
2
+
3
+ import ray.util.state
4
+ from deltacat.utils.ray_utils.concurrency import invoke_parallel
5
+ import ray
6
+ import time
7
+
8
+
9
+ @ray.remote
10
+ def f(x):
11
+ return time.sleep(x)
12
+
13
+
14
+ class TestInvokeParallel(TestCase):
15
+ @classmethod
16
+ def setUpClass(cls):
17
+ super().setUpClass()
18
+ ray.init(local_mode=True, ignore_reinit_error=True)
19
+
20
+ def test_invoke_parallel_when_max_parallelism_is_list_size(self):
21
+
22
+ items = [1 for i in range(3)]
23
+
24
+ result = invoke_parallel(items=items, ray_task=f, max_parallelism=3)
25
+
26
+ self.assertEqual(3, len(result))
27
+
28
+ def test_invoke_parallel_when_max_parallelism_is_less_than_list_size(self):
29
+ @ray.remote
30
+ def f(x):
31
+ return x
32
+
33
+ items = [i for i in range(3)]
34
+
35
+ result = invoke_parallel(items=items, ray_task=f, max_parallelism=1)
36
+
37
+ self.assertEqual(3, len(result))
38
+
39
+ def test_invoke_parallel_with_options_provider(self):
40
+
41
+ items = [1 for i in range(1)]
42
+
43
+ result = invoke_parallel(
44
+ items=items,
45
+ ray_task=f,
46
+ max_parallelism=10,
47
+ options_provider=lambda x, y: {"memory": 1},
48
+ )
49
+
50
+ self.assertEqual(1, len(result))
@@ -1,6 +1,8 @@
1
1
  import unittest
2
2
  from unittest import mock
3
3
  import time
4
+ from multiprocessing import Pool
5
+ import platform
4
6
 
5
7
 
6
8
  class TestGetCurrentClusterUtilization(unittest.TestCase):
@@ -70,3 +72,29 @@ class TestProcessUtilizationOverTimeRange(unittest.TestCase):
70
72
  nu.schedule_callback(test_callback, 1)
71
73
  time.sleep(3)
72
74
  self.assertTrue(nu.test_field_set)
75
+
76
+
77
+ class TestTimeoutDecorator(unittest.TestCase):
78
+ from deltacat.utils.resources import timeout
79
+
80
+ @staticmethod
81
+ @timeout(2)
82
+ def something_that_runs_xs(x, *args, **kwargs):
83
+ time.sleep(x)
84
+
85
+ def test_timeout(self):
86
+ if platform.system() != "Windows":
87
+ self.assertRaises(
88
+ TimeoutError, lambda: self.something_that_runs_xs(3, test=10)
89
+ )
90
+
91
+ def test_sanity_in_multiprocess(self):
92
+ if platform.system() != "Windows":
93
+ # An alarm works per process
94
+ # https://pubs.opengroup.org/onlinepubs/9699919799/functions/alarm.html
95
+ with Pool(3) as p:
96
+ p.map(self.something_that_runs_xs, [1, 1.1, 1.2])
97
+
98
+ def test_sanity(self):
99
+ if platform.system() != "Windows":
100
+ self.something_that_runs_xs(1, test=10)
@@ -1,6 +1,8 @@
1
1
  # Allow classes to use self-referencing Type hints in Python 3.7.
2
2
  from __future__ import annotations
3
3
 
4
+ import functools
5
+ import signal
4
6
  from contextlib import AbstractContextManager
5
7
  from types import TracebackType
6
8
  import ray
@@ -230,3 +232,46 @@ class ProcessUtilizationOverTimeRange(AbstractContextManager):
230
232
  continuous_thread = ScheduleThread()
231
233
  continuous_thread.start()
232
234
  return cease_continuous_run
235
+
236
+
237
+ def timeout(value_in_seconds: int):
238
+ """
239
+ A decorator that will raise a TimeoutError if the decorated function takes longer
240
+ than the specified timeout.
241
+
242
+ Note: The decorator does not work in a multithreading env or on Windows platform.
243
+ Hence, the default behavior is same as executing a method without timeout set.
244
+
245
+ Also note: it is still the responsibility of the caller to clean up any resource leaks
246
+ during the execution of the underlying function.
247
+ """
248
+
249
+ def _decorate(func):
250
+ @functools.wraps(func)
251
+ def wrapper(*args, **kwargs):
252
+ current_platform = platform.system()
253
+
254
+ def handler(signum, frame):
255
+ raise TimeoutError(
256
+ f"Timeout occurred on method: {func.__name__},"
257
+ f" args={args}, kwargs={kwargs}"
258
+ )
259
+
260
+ if current_platform == "Windows":
261
+ return func(*args, **kwargs)
262
+
263
+ old_handler = signal.signal(signal.SIGALRM, handler)
264
+ # An alarm works per process.
265
+ # https://pubs.opengroup.org/onlinepubs/9699919799/functions/alarm.html
266
+ signal.alarm(value_in_seconds)
267
+ try:
268
+ return func(*args, **kwargs)
269
+ finally:
270
+ # reset the SIGALRM handler
271
+ signal.signal(signal.SIGALRM, old_handler)
272
+ # cancel the alarm
273
+ signal.alarm(0)
274
+
275
+ return wrapper
276
+
277
+ return _decorate
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deltacat
3
- Version: 1.1.5
3
+ Version: 1.1.7
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,11 +1,11 @@
1
- deltacat/__init__.py,sha256=i3bpmX1O0ZJD9XFiuqF0RHURR1lLKvdTBzVOP90fKQA,1777
1
+ deltacat/__init__.py,sha256=2IToNRi3HWEX5V2CHAd0xKS3PWd580iaaGUmJsj_IYU,1777
2
2
  deltacat/constants.py,sha256=_6oRI-3yp5c8J1qKGQZrt89I9-ttT_gSSvVsJ0h8Duc,1939
3
3
  deltacat/exceptions.py,sha256=xqZf8CwysNYP2d39pf27OnXGStPREgBgIM-e2Tts-TI,199
4
4
  deltacat/logs.py,sha256=6g16VkEFidbaMjgenAjggE1r2l664drMVhreRs8B1IQ,8438
5
5
  deltacat/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  deltacat/aws/clients.py,sha256=VgddlV3AEjlBGIFmhhHxokYzwJ-lXnmHAeprVyADduI,6948
7
- deltacat/aws/constants.py,sha256=aAhOKeLVgtpekA3h9otHUrHqY2bLDWs2QlL7GrdI63g,352
8
- deltacat/aws/s3u.py,sha256=lgoE6es6N4xfzwyydxmVspROP1hrNfanB6JqjyBoRb4,24859
7
+ deltacat/aws/constants.py,sha256=5W38VZWlaVl_TIKBNAN1tx7cxyzNQO2cSwtkyc1wRAs,1051
8
+ deltacat/aws/s3u.py,sha256=19VFR7fc3MDqrcv9n9GLYZQNTGwYHnQO-5Dk8nX5om8,27738
9
9
  deltacat/aws/redshift/__init__.py,sha256=7SvjG-dqox8zZUhFicTsUvpG5vXYDl_QQ3ohlHOgTKc,342
10
10
  deltacat/aws/redshift/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  deltacat/aws/redshift/model/manifest.py,sha256=ThgpdwzaWz493Zz9e8HSWwuxEheA1nDuypM3pe4vozk,12987
@@ -36,7 +36,7 @@ deltacat/compute/compactor/model/materialize_result.py,sha256=Ngwg1khN55FK2iBKPn
36
36
  deltacat/compute/compactor/model/primary_key_index.py,sha256=9EYoxauzXeEY_cYAVSCqDMXps8wEAPSXWk-6_LLNwBU,10449
37
37
  deltacat/compute/compactor/model/pyarrow_write_result.py,sha256=WYIa0DRcyaemR6yUS8_8RLQ2voTmCVNFUL99qxPmt70,1324
38
38
  deltacat/compute/compactor/model/repartition_result.py,sha256=HZy7Ls6toI4rXgVW2yIKMIkVS8o9kxvlIJPvo5_pCxA,140
39
- deltacat/compute/compactor/model/round_completion_info.py,sha256=CDlafUX6MSbdBK_zQyzEwD0mYwu-Xs2rtU0-DsEwroM,4940
39
+ deltacat/compute/compactor/model/round_completion_info.py,sha256=SGR6WeGBGwRNDz6KsSqenlGvo0GYtwbPMnvpm5un0wM,5115
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
@@ -50,8 +50,8 @@ deltacat/compute/compactor/utils/round_completion_file.py,sha256=-j6ZzhJBDrJ6Vz6
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=ovOTJUOtq6tIc7krya9IPtonI-_nHJL9NFl5D_R9i4Q,26087
54
- deltacat/compute/compactor_v2/constants.py,sha256=jGLEK5uS7AcnoVjPGUDIO4ljDbBYZlqzQleKJRKvnZM,2118
53
+ deltacat/compute/compactor_v2/compaction_session.py,sha256=ecCz0xsM0OB9GnzfogETOT769W61ejm3izL0BHXpqc8,27574
54
+ deltacat/compute/compactor_v2/constants.py,sha256=0vwXh66eIx8nGgLoEnlXThiLNL1U-xG_Mw_q_lD4ptQ,2564
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
@@ -59,14 +59,15 @@ deltacat/compute/compactor_v2/deletes/delete_strategy_equality_delete.py,sha256=
59
59
  deltacat/compute/compactor_v2/deletes/model.py,sha256=kW7kfRe4jVNMnsWQrl0nyKdDpvB9mbJND-MVzAajbAI,558
60
60
  deltacat/compute/compactor_v2/deletes/utils.py,sha256=9CchSw1_caWGWtRHa4ycy58t5T422EN6UB9XYa1zpbk,6640
61
61
  deltacat/compute/compactor_v2/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
+ deltacat/compute/compactor_v2/model/compaction_session.py,sha256=S0ejfZBBwG_fUcg06MjTUx2t7gwZVS8y74DMehqo6sk,579
62
63
  deltacat/compute/compactor_v2/model/hash_bucket_input.py,sha256=iJy8kLi1dIpFIyfoAjkaAtZvg8Np1z7BsUNGAcWfFm4,3042
63
64
  deltacat/compute/compactor_v2/model/hash_bucket_result.py,sha256=EsY9BPPywhmxlcLKn3kGWzAX4s4BTR2vYyPUB-wAEOc,309
64
65
  deltacat/compute/compactor_v2/model/merge_file_group.py,sha256=1o86t9lc3K6ZvtViVO1SVljCj6f0B3MfB3hqtGm2S0s,7410
65
66
  deltacat/compute/compactor_v2/model/merge_input.py,sha256=ITRBR8gMbJpeRkZhRaVzGEEk3F2WqS2LwEkjd5zcaMQ,5416
66
67
  deltacat/compute/compactor_v2/model/merge_result.py,sha256=_IZTCStpb4UKiRCJYA3g6EhAqjrw0t9vmoDAN8kIK-Y,436
67
68
  deltacat/compute/compactor_v2/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- deltacat/compute/compactor_v2/steps/hash_bucket.py,sha256=be61umFucTfzeZ03xii1P_NFqXsGmhl55hm_ULuCFPc,6617
69
- deltacat/compute/compactor_v2/steps/merge.py,sha256=xjLpv93o9bMjihLXXO1j4XCXhyARc5GQI5eWxQRy0XI,21657
69
+ deltacat/compute/compactor_v2/steps/hash_bucket.py,sha256=ftALKqMaF9YUcwDLMgie00_wYh2r1QIywbHHHxCjXlk,6852
70
+ deltacat/compute/compactor_v2/steps/merge.py,sha256=wl7noSryctmAlYKbwszEViYKYGlIDKgFHKGgm6VREMQ,21880
70
71
  deltacat/compute/compactor_v2/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
72
  deltacat/compute/compactor_v2/utils/content_type_params.py,sha256=rNKZisxGrLQOkwX8eHUQiFoTR1V-E66pMqWigtrs618,2156
72
73
  deltacat/compute/compactor_v2/utils/dedupe.py,sha256=62tFCY2iRP7I3-45GCIYs6_SJsQl8C5lBEr8gbNfbsw,1932
@@ -74,7 +75,7 @@ deltacat/compute/compactor_v2/utils/delta.py,sha256=8hjkDeIIkSX-gAQ2utQSp2sZcO2t
74
75
  deltacat/compute/compactor_v2/utils/io.py,sha256=autXlE3uHICdCCuJoS7mfdeJbRRiz2_xlz-3izlccB4,5264
75
76
  deltacat/compute/compactor_v2/utils/merge.py,sha256=hK4Y7acrtgfvWWTz-fAGznEg6qn6dBYu8blQUQVHhs0,5244
76
77
  deltacat/compute/compactor_v2/utils/primary_key_index.py,sha256=MAscmL35WfwN7Is72aFlD_cGhxtZgjRwwR5kS9Yn2uU,11393
77
- deltacat/compute/compactor_v2/utils/task_options.py,sha256=WK-1-1gncUSZI9yxBEG1AokDZKTBBhisYcYGijlitHY,13857
78
+ deltacat/compute/compactor_v2/utils/task_options.py,sha256=kxbedQ9x7BCpr9ltUGzof7XcmTfpvc2_WPZvMBl6yCo,14285
78
79
  deltacat/compute/merge_on_read/__init__.py,sha256=ckbgngmqPjYBYz_NySsR1vNTOb_hNpeL1sYkZKvBI9M,214
79
80
  deltacat/compute/merge_on_read/daft.py,sha256=1oC38u5ig_aTrq7EzyWBo8Ui54rb6yERYMk-vEFbpxM,1400
80
81
  deltacat/compute/merge_on_read/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -119,7 +120,7 @@ deltacat/io/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
120
  deltacat/io/aws/redshift/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
121
  deltacat/io/aws/redshift/redshift_datasource.py,sha256=X183O4tgBqtaZOSFmMFvp-9mv8NX5kGvRvX0eoSX8rA,22599
121
122
  deltacat/storage/__init__.py,sha256=TeKB48D7xDxIn1EvtqxYk4LSzPk0_aS6Gzxh2wVg3XM,1561
122
- deltacat/storage/interface.py,sha256=SFJxYk81QiJ9VqBLy1kLoc3gPE37C0cwzHGT26Oaicw,21649
123
+ deltacat/storage/interface.py,sha256=PL6gPyFeyYPwdcqQCGbC2OAGapDKG00fkQ7iTiOcRi4,21913
123
124
  deltacat/storage/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
125
  deltacat/storage/model/delete_parameters.py,sha256=yF3_gdDiDkMAuLJPlBr4Es25SYijzEKGxArwgXCrNwI,1563
125
126
  deltacat/storage/model/delta.py,sha256=87F3U7r-EVkHtuIFRNQB8b9qcZ-C3FGosCXGGZUl67g,14857
@@ -136,25 +137,25 @@ deltacat/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
137
  deltacat/tests/test_logs.py,sha256=6BEMw8VApFg2msFwCAVosz8NWJYATtX5furHyz8UluM,3828
137
138
  deltacat/tests/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
139
  deltacat/tests/aws/test_clients.py,sha256=23GMWfz27WWBDXSqphG9mfputsyS7j3I5P_HRk4YoKE,3790
139
- deltacat/tests/aws/test_s3u.py,sha256=QflXbR94o7WobGBm6jhQDK5lJJD2Pd9z2uvi4J7WEJg,437
140
+ deltacat/tests/aws/test_s3u.py,sha256=VThBqCe9KIfETax7ylpu7gtOCmkbMbwx7MPjBCj9SJ4,7805
140
141
  deltacat/tests/catalog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
- deltacat/tests/catalog/test_default_catalog_impl.py,sha256=9srCU5yQ159oZ9_PoJ_mWMzVUW5bKV0mnmPJc5zKCQQ,3125
142
+ deltacat/tests/catalog/test_default_catalog_impl.py,sha256=2l5uwmtLlUJ9yH1LDggtj81fa-pHqbE0-VBt6G4Hyc0,3180
142
143
  deltacat/tests/compute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
144
  deltacat/tests/compute/compact_partition_rebase_then_incremental_test_cases.py,sha256=ctJTmL7JKtEc-2UX8dTVPRct0wCKelGf90Jwd0lgE14,73645
144
- deltacat/tests/compute/compact_partition_test_cases.py,sha256=uoNRy5oCHXhKktdZABryJ3n_smbimcKINxxNtFfjWsE,22651
145
- deltacat/tests/compute/test_compact_partition_incremental.py,sha256=NLhGPOa7Y-ymw3_SlFhqI16MppYLUKc7y5ST9QXUbR8,11301
145
+ deltacat/tests/compute/compact_partition_test_cases.py,sha256=IzG8aITqlX5dJqVIiihmKyQlLKolQH7GacKsebc6qRk,25061
146
+ deltacat/tests/compute/test_compact_partition_incremental.py,sha256=vH2z9F18QdjpQmNKTUk4IIrwRC5Uj7z41Ox7q1rFxZU,13995
146
147
  deltacat/tests/compute/test_compact_partition_params.py,sha256=Dm5eLyHo8oGMeO3XBbpj1rZqHtPZ1hAB7z2qvzc4Lxk,8497
147
- deltacat/tests/compute/test_compact_partition_rebase_then_incremental.py,sha256=nIO2r4tjO0kMhKKEWs2cGALP9-2NiluIGnFCOFmws90,14364
148
+ deltacat/tests/compute/test_compact_partition_rebase_then_incremental.py,sha256=NvXjgrYAB5zq_SzwjYMYwsTqseAMPNlDjaA6LEBJRbg,14159
148
149
  deltacat/tests/compute/test_util_common.py,sha256=jGc862Rv1gf51HN_Dl9v5gvhj4bnwLidurz9Z8wWJZ0,6066
149
150
  deltacat/tests/compute/test_util_constant.py,sha256=4o-W3E7r7jhFl1A3OFLLrdKnwcF46zx4lEIDY8ONJ3c,929
150
- deltacat/tests/compute/test_util_create_table_deltas_repo.py,sha256=4i4CrFTBK51uzCswUK7KZz7UjutD5r6ptBQJ0Kj3WvA,7613
151
+ deltacat/tests/compute/test_util_create_table_deltas_repo.py,sha256=0iZqcCqJsmQPMe4YW5mSXYZnXt3OU-EVTS7DD0gxbss,8992
151
152
  deltacat/tests/compute/compactor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
153
  deltacat/tests/compute/compactor/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
154
  deltacat/tests/compute/compactor/steps/test_repartition.py,sha256=0uRguPEKeLSYs746Jv8io-HZMWdyXNcOMBu8GO2mA0M,9305
154
155
  deltacat/tests/compute/compactor/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
156
  deltacat/tests/compute/compactor/utils/test_io.py,sha256=st5mlU4cVU-eQl7B4mvPgNA3izuNwbVawYOp-NcoyrI,4326
156
157
  deltacat/tests/compute/compactor_v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
- deltacat/tests/compute/compactor_v2/test_compaction_session.py,sha256=4RTvixoYDmmwdoXhCzTWacvhVpmN7BPijoM-LmtfZ-0,3320
158
+ deltacat/tests/compute/compactor_v2/test_compaction_session.py,sha256=xubn1WYSX95oP5HKRm7bFu85z7TOQtNKFbdA3t4VZFQ,3375
158
159
  deltacat/tests/compute/compactor_v2/test_hashlib.py,sha256=8csF2hFWtBvY2MbX3-6iphCsVXxRp0zP1NTnKhfdmkg,328
159
160
  deltacat/tests/compute/compactor_v2/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
161
  deltacat/tests/compute/compactor_v2/utils/test_task_options.py,sha256=4fc5MJTLm3hFlFHK_-5MfyfzeZtOo8D2kBqDE2b8lh4,862
@@ -165,7 +166,7 @@ deltacat/tests/io/test_memcached_object_store.py,sha256=25SB5xTMAG0HKwZwsDLhMreJ
165
166
  deltacat/tests/io/test_ray_plasma_object_store.py,sha256=-wJZP6lRtEOogR25wjEiIBGz_lpvWVihwlZ5GqandZU,1911
166
167
  deltacat/tests/io/test_redis_object_store.py,sha256=sZrXrYjkw8u_XrvFilhBbLc8PPnZiuMKa1_Bt9ka5qs,3838
167
168
  deltacat/tests/io/test_s3_object_store.py,sha256=4b7PYEfQJnYGUz6fcLFWVVyRHTlH_yd8CIaCv9l33Gg,1900
168
- deltacat/tests/local_deltacat_storage/__init__.py,sha256=qA4eAdwcrWhTih6-AJ638zIi4HX-aeaMNyxter00GrY,35466
169
+ deltacat/tests/local_deltacat_storage/__init__.py,sha256=JsngJj0th_JFVCPEH-5MVJ6VhPvcWASB_71eIt6uVGQ,36316
169
170
  deltacat/tests/stats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
171
  deltacat/tests/stats/test_intervals.py,sha256=S92DgkALQ1WmbLWcxtvS7RlVGvL-XoPJKUUbkdn9_CQ,1955
171
172
  deltacat/tests/test_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -180,8 +181,10 @@ deltacat/tests/utils/test_metrics.py,sha256=Ym9nOz1EtB180pLmvugihj1sDTNDMb5opIjj
180
181
  deltacat/tests/utils/test_placement.py,sha256=g61wVOMkHe4YJeR9Oxg_BOVQ6bhHHbC3IBYv8YhUu94,597
181
182
  deltacat/tests/utils/test_pyarrow.py,sha256=eZAuYp9MUf8lmpIilH57JkURuNsTGZ3IAGC4Gm5hdrM,17307
182
183
  deltacat/tests/utils/test_record_batch_tables.py,sha256=AkG1WyljQmjnl-AxhbFWyo5LnMIKRyLScfgC2B_ES-s,11321
183
- deltacat/tests/utils/test_resources.py,sha256=HtpvDrfPZQNtGDXUlsIzc_yd7Vf1cDscZ3YbN0oTvO8,2560
184
+ deltacat/tests/utils/test_resources.py,sha256=0ikhkK2kml90NHnWDjFiLQeoFF2giVfW0R6urfpAaAs,3443
184
185
  deltacat/tests/utils/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
+ deltacat/tests/utils/ray_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
187
+ deltacat/tests/utils/ray_utils/test_concurrency.py,sha256=TjZpX0cjMDEIS79p_--j_BfT0zXKNkTLY1ZzNokBTs0,1211
185
188
  deltacat/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
189
  deltacat/types/media.py,sha256=7_QRU6NbjmJk0GLAn_Km6ja8RE5G3V8jvLfUXqnjnqU,2320
187
190
  deltacat/types/partial_download.py,sha256=9BJ5b0DHyWWeV7wMZjOfYoeH_iil_bjZ9b_WMpUzvHs,2516
@@ -197,7 +200,7 @@ deltacat/utils/pandas.py,sha256=GfwjYb8FUSEeoBdXZI1_NJkdjxPMbCCUhlyRfGbDkn8,9562
197
200
  deltacat/utils/performance.py,sha256=7ZLaMkS1ehPSIhT5uOQVBHvjC70iKHzoFquFo-KL0PI,645
198
201
  deltacat/utils/placement.py,sha256=Lj20fb-eq8rgMdm_M2MBMfDLwhDM1sS1nJj2DvIK56s,12060
199
202
  deltacat/utils/pyarrow.py,sha256=gYcoRhQoBoAFo69WNijMobrLGta4VASg8VarWPiB34Y,28979
200
- deltacat/utils/resources.py,sha256=Ax1OgLLbZI4oYpp4Ki27OLaST-7I-AJgZwU87FVfY8g,8253
203
+ deltacat/utils/resources.py,sha256=t5vEPisKfqGoAE8jF5Mm7yGKXkiLDVg5OlxPOIR7j-I,9757
201
204
  deltacat/utils/s3fs.py,sha256=PmUJ5Fm1WmD-_zp_M6yd9VbXvIoJuBeK6ApOdJJApLE,662
202
205
  deltacat/utils/schema.py,sha256=m4Wm4ZQcpttzOUxex4dVneGlHy1_E36HspTcjNYzvVM,1564
203
206
  deltacat/utils/ray_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -206,8 +209,8 @@ deltacat/utils/ray_utils/concurrency.py,sha256=JDVwMiQWrmuSlyCWAoiq9ctoJ0XADEfDD
206
209
  deltacat/utils/ray_utils/dataset.py,sha256=SIljK3UkSqQ6Ntit_iSiYt9yYjN_gGrCTX6_72XdQ3w,3244
207
210
  deltacat/utils/ray_utils/performance.py,sha256=d7JFM7vTXHzkGx9qNQcZzUWajnqINvYRwaM088_FpsE,464
208
211
  deltacat/utils/ray_utils/runtime.py,sha256=5eaBWTDm0IXVoc5Y6aacoVB-f0Mnv-K2ewyTSjHKHwM,5009
209
- deltacat-1.1.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
210
- deltacat-1.1.5.dist-info/METADATA,sha256=ZXriHPvPca0lz3LrEfynDq-u4dyxhGvhKaM3m9veiT0,1780
211
- deltacat-1.1.5.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
212
- deltacat-1.1.5.dist-info/top_level.txt,sha256=RWdIcid4Bv2i2ozLVh-70kJpyB61xEKXod9XXGpiono,9
213
- deltacat-1.1.5.dist-info/RECORD,,
212
+ deltacat-1.1.7.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
213
+ deltacat-1.1.7.dist-info/METADATA,sha256=xGnSoie5x3xr1PBpTT3hNiyq0QrkqevK-bH2Hr1PTro,1780
214
+ deltacat-1.1.7.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
215
+ deltacat-1.1.7.dist-info/top_level.txt,sha256=RWdIcid4Bv2i2ozLVh-70kJpyB61xEKXod9XXGpiono,9
216
+ deltacat-1.1.7.dist-info/RECORD,,