deltacat 1.1.37__tar.gz → 1.1.38__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {deltacat-1.1.37/deltacat.egg-info → deltacat-1.1.38}/PKG-INFO +1 -1
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/__init__.py +1 -1
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/compaction_session_audit_info.py +28 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/primary_key_index.py +1 -2
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor_v2/test_compaction_session.py +88 -0
- {deltacat-1.1.37 → deltacat-1.1.38/deltacat.egg-info}/PKG-INFO +1 -1
- {deltacat-1.1.37 → deltacat-1.1.38}/LICENSE +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/MANIFEST.in +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/README.md +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/aws/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/aws/clients.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/aws/constants.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/aws/redshift/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/aws/redshift/model/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/aws/redshift/model/manifest.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/aws/s3u.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/benchmarking/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/benchmarking/benchmark_parquet_reads.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/benchmarking/conftest.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/catalog/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/catalog/default_catalog_impl/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/catalog/delegate.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/catalog/interface.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/catalog/model/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/catalog/model/catalog.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/catalog/model/table_definition.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/compaction_session.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/compact_partition_params.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/compactor_version.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/dedupe_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/delta_annotated.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/delta_file_envelope.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/delta_file_locator.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/hash_bucket_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/materialize_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/primary_key_index.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/pyarrow_write_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/repartition_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/round_completion_info.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/table_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/repartition_session.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/steps/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/steps/dedupe.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/steps/hash_bucket.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/steps/materialize.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/steps/repartition.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/utils/io.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/utils/primary_key_index.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/utils/round_completion_file.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/utils/sort_key.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/utils/system_columns.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/compaction_session.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/constants.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/deletes/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/deletes/delete_file_envelope.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/deletes/delete_strategy.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/deletes/delete_strategy_equality_delete.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/deletes/model.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/deletes/utils.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/model/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/model/evaluate_compaction_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/model/hash_bucket_input.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/model/hash_bucket_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/model/merge_file_group.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/model/merge_input.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/model/merge_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/private/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/private/compaction_utils.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/steps/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/steps/hash_bucket.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/steps/merge.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/content_type_params.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/dedupe.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/delta.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/io.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/merge.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/task_options.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/merge_on_read/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/merge_on_read/daft.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/merge_on_read/model/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/merge_on_read/model/merge_on_read_params.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/merge_on_read/utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/merge_on_read/utils/delta.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/resource_estimation/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/resource_estimation/delta.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/resource_estimation/manifest.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/resource_estimation/model.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/resource_estimation/parquet.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/stats/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/stats/models/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/stats/models/delta_column_stats.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/stats/models/delta_stats.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/stats/models/delta_stats_cache_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/stats/models/manifest_entry_stats.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/stats/models/stats_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/stats/types.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/constants.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/exceptions.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/aws/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/aws/redshift/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/dataset.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/file_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/memcached_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/ray_plasma_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/read_api.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/redis_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/io/s3_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/logs.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/interface.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/delete_parameters.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/delta.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/list_result.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/locator.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/namespace.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/partition.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/partition_spec.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/sort_key.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/stream.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/table.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/table_version.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/transform.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/storage/model/types.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/aws/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/aws/test_clients.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/aws/test_s3u.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/catalog/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/catalog/test_default_catalog_impl.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compact_partition_multiple_rounds_test_cases.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compact_partition_rebase_test_cases.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compact_partition_rebase_then_incremental_test_cases.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compact_partition_test_cases.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor/steps/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor/steps/test_repartition.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor/utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor/utils/test_io.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor/utils/test_round_completion_file.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor_v2/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor_v2/test_hashlib.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor_v2/utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor_v2/utils/test_content_type_params.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor_v2/utils/test_primary_key_index.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor_v2/utils/test_task_options.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/resource_estimation/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/resource_estimation/data/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/resource_estimation/test_delta.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/resource_estimation/test_manifest.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_compact_partition_incremental.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_compact_partition_multiple_rounds.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_compact_partition_params.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_compact_partition_rebase.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_compact_partition_rebase_then_incremental.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_util_common.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_util_constant.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_util_create_table_deltas_repo.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/io/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/io/test_cloudpickle_bug_fix.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/io/test_file_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/io/test_memcached_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/io/test_ray_plasma_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/io/test_redis_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/io/test_s3_object_store.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/local_deltacat_storage/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/local_deltacat_storage/exceptions.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/test_exceptions.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/test_logs.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/test_utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/test_utils/constants.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/test_utils/pyarrow.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/test_utils/storage.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/test_utils/utils.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/data/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/ray_utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/ray_utils/test_concurrency.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/ray_utils/test_dataset.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/test_cloudpickle.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/test_daft.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/test_metrics.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/test_placement.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/test_pyarrow.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/test_record_batch_tables.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/utils/test_resources.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/types/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/types/media.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/types/partial_download.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/types/tables.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/arguments.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/cloudpickle.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/common.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/daft.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/metrics.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/numpy.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/pandas.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/performance.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/placement.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/pyarrow.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/ray_utils/__init__.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/ray_utils/collections.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/ray_utils/concurrency.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/ray_utils/dataset.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/ray_utils/performance.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/ray_utils/runtime.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/resources.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/s3fs.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat/utils/schema.py +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat.egg-info/SOURCES.txt +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat.egg-info/dependency_links.txt +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat.egg-info/requires.txt +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/deltacat.egg-info/top_level.txt +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/setup.cfg +0 -0
- {deltacat-1.1.37 → deltacat-1.1.38}/setup.py +0 -0
@@ -322,6 +322,17 @@ class CompactionSessionAuditInfo(dict):
|
|
322
322
|
"""
|
323
323
|
return self.get("outputSizePyarrowBytes")
|
324
324
|
|
325
|
+
@property
|
326
|
+
def output_record_count(self) -> int:
|
327
|
+
"""
|
328
|
+
The total number of records in the compacted output (includes untouched records).
|
329
|
+
|
330
|
+
Represents the final record count after compaction, including:
|
331
|
+
- Records that were processed and materialized
|
332
|
+
- Records that were untouched and copied by reference
|
333
|
+
"""
|
334
|
+
return self.get("outputRecordCount")
|
335
|
+
|
325
336
|
@property
|
326
337
|
def total_cluster_memory_bytes(self) -> float:
|
327
338
|
"""
|
@@ -672,6 +683,19 @@ class CompactionSessionAuditInfo(dict):
|
|
672
683
|
self["outputSizeBytes"] = output_size_bytes
|
673
684
|
return output_size_bytes
|
674
685
|
|
686
|
+
def set_output_record_count(
|
687
|
+
self, output_records: int
|
688
|
+
) -> CompactionSessionAuditInfo:
|
689
|
+
"""
|
690
|
+
This includes both processed records and untouched records copied by reference.
|
691
|
+
"""
|
692
|
+
if output_records < 0:
|
693
|
+
raise ValueError(
|
694
|
+
f"Output record count cannot be negative: {output_records}"
|
695
|
+
)
|
696
|
+
self["outputRecordCount"] = output_records
|
697
|
+
return self
|
698
|
+
|
675
699
|
def set_output_size_pyarrow_bytes(
|
676
700
|
self, output_size_pyarrow_bytes: float
|
677
701
|
) -> CompactionSessionAuditInfo:
|
@@ -902,6 +926,10 @@ class CompactionSessionAuditInfo(dict):
|
|
902
926
|
self.set_output_file_count(pyarrow_write_result.files)
|
903
927
|
self.set_output_size_bytes(pyarrow_write_result.file_bytes)
|
904
928
|
self.set_output_size_pyarrow_bytes(pyarrow_write_result.pyarrow_bytes)
|
929
|
+
# NOTE: Aggregating untouched_record_count with records to get a total of record count in the compacted table
|
930
|
+
self.set_output_record_count(
|
931
|
+
pyarrow_write_result.records + untouched_file_record_count
|
932
|
+
)
|
905
933
|
|
906
934
|
self.set_peak_memory_used_bytes_per_task(
|
907
935
|
max(
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/primary_key_index.py
RENAMED
@@ -93,7 +93,7 @@ def _append_table_by_hash_bucket(
|
|
93
93
|
all_buckets = pc.unique(pyarrow_table[sc._HASH_BUCKET_IDX_COLUMN_NAME])
|
94
94
|
assert (
|
95
95
|
len(all_buckets) == 1
|
96
|
-
), f"Only one hash bucket is allowed
|
96
|
+
), f"Only one hash bucket is allowed but found {len(all_buckets)}"
|
97
97
|
assert (
|
98
98
|
all_buckets[0].as_py() == hb_idx
|
99
99
|
), f"Hash bucket not equal, {all_buckets[0]} and {hb_idx}"
|
@@ -153,7 +153,6 @@ def _optimized_group_record_batches_by_hash_bucket(
|
|
153
153
|
record_batches.append(record_batch)
|
154
154
|
|
155
155
|
if record_batches:
|
156
|
-
print(f"{len(record_batches)} -- END")
|
157
156
|
appended_len, append_latency = timed_invocation(
|
158
157
|
_append_table_by_hash_bucket,
|
159
158
|
pa.Table.from_batches(record_batches),
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor_v2/test_compaction_session.py
RENAMED
@@ -356,6 +356,7 @@ class TestCompactionSession:
|
|
356
356
|
assert compaction_audit.hash_bucket_count == 2
|
357
357
|
assert compaction_audit.input_file_count == 1
|
358
358
|
assert compaction_audit.output_file_count == 2
|
359
|
+
assert compaction_audit.output_record_count == 4
|
359
360
|
assert abs(compaction_audit.output_size_bytes - 1832) / 1832 <= self.ERROR_RATE
|
360
361
|
assert abs(compaction_audit.input_size_bytes - 936) / 936 <= self.ERROR_RATE
|
361
362
|
|
@@ -423,9 +424,18 @@ class TestCompactionSession:
|
|
423
424
|
assert compaction_audit.hash_bucket_count == 2
|
424
425
|
assert compaction_audit.input_file_count == 3
|
425
426
|
assert compaction_audit.output_file_count == 2
|
427
|
+
assert compaction_audit.output_record_count == 7
|
426
428
|
assert abs(compaction_audit.output_size_bytes - 1843) / 1843 <= self.ERROR_RATE
|
427
429
|
assert abs(compaction_audit.input_size_bytes - 2748) / 2748 <= self.ERROR_RATE
|
428
430
|
|
431
|
+
record_invariant = compaction_audit.output_record_count == (
|
432
|
+
compaction_audit.input_records
|
433
|
+
- compaction_audit.records_deduped
|
434
|
+
- compaction_audit.records_deleted
|
435
|
+
+ compaction_audit.untouched_record_count
|
436
|
+
)
|
437
|
+
assert record_invariant is True
|
438
|
+
|
429
439
|
def test_compact_partition_when_incremental_then_intelligent_estimation_sanity(
|
430
440
|
self, s3_resource, local_deltacat_storage_kwargs
|
431
441
|
):
|
@@ -1006,3 +1016,81 @@ class TestCompactionSession:
|
|
1006
1016
|
|
1007
1017
|
rcf = get_rcf(s3_resource, new_uri)
|
1008
1018
|
assert rcf.hash_bucket_count == 4
|
1019
|
+
|
1020
|
+
def test_compaction_with_zero_records(
|
1021
|
+
self, s3_resource, local_deltacat_storage_kwargs
|
1022
|
+
):
|
1023
|
+
"""
|
1024
|
+
Test case where compaction results in 0 records.
|
1025
|
+
Verify audit handles this correctly without crashing.
|
1026
|
+
"""
|
1027
|
+
# setup - create empty source delta
|
1028
|
+
staged_source = stage_partition_from_file_paths(
|
1029
|
+
self.NAMESPACE, ["source"], **local_deltacat_storage_kwargs
|
1030
|
+
)
|
1031
|
+
|
1032
|
+
# Create an empty table that will result in 0 records after compaction
|
1033
|
+
empty_table = pa.table({"pk": pa.array([])})
|
1034
|
+
source_delta = commit_delta_to_staged_partition(
|
1035
|
+
staged_source, pa_table=empty_table, **local_deltacat_storage_kwargs
|
1036
|
+
)
|
1037
|
+
|
1038
|
+
staged_dest = stage_partition_from_file_paths(
|
1039
|
+
self.NAMESPACE, ["destination"], **local_deltacat_storage_kwargs
|
1040
|
+
)
|
1041
|
+
dest_partition = ds.commit_partition(
|
1042
|
+
staged_dest, **local_deltacat_storage_kwargs
|
1043
|
+
)
|
1044
|
+
|
1045
|
+
# action
|
1046
|
+
rcf_url = compact_partition(
|
1047
|
+
CompactPartitionParams.of(
|
1048
|
+
{
|
1049
|
+
"compaction_artifact_s3_bucket": TEST_S3_RCF_BUCKET_NAME,
|
1050
|
+
"compacted_file_content_type": ContentType.PARQUET,
|
1051
|
+
"dd_max_parallelism_ratio": 1.0,
|
1052
|
+
"deltacat_storage": ds,
|
1053
|
+
"deltacat_storage_kwargs": local_deltacat_storage_kwargs,
|
1054
|
+
"destination_partition_locator": dest_partition.locator,
|
1055
|
+
"drop_duplicates": True,
|
1056
|
+
"hash_bucket_count": 1,
|
1057
|
+
"last_stream_position_to_compact": source_delta.stream_position,
|
1058
|
+
"list_deltas_kwargs": {
|
1059
|
+
**local_deltacat_storage_kwargs,
|
1060
|
+
**{"equivalent_table_types": []},
|
1061
|
+
},
|
1062
|
+
"primary_keys": ["pk"],
|
1063
|
+
"rebase_source_partition_locator": source_delta.partition_locator,
|
1064
|
+
"rebase_source_partition_high_watermark": source_delta.stream_position,
|
1065
|
+
"records_per_compacted_file": 4000,
|
1066
|
+
"s3_client_kwargs": {},
|
1067
|
+
"source_partition_locator": source_delta.partition_locator,
|
1068
|
+
}
|
1069
|
+
)
|
1070
|
+
)
|
1071
|
+
|
1072
|
+
# verify - compaction should complete successfully with 0 records
|
1073
|
+
assert rcf_url is not None
|
1074
|
+
rcf = get_rcf(s3_resource, rcf_url)
|
1075
|
+
|
1076
|
+
_, compaction_audit_key = rcf.compaction_audit_url.strip("s3://").split("/", 1)
|
1077
|
+
compaction_audit = CompactionSessionAuditInfo(
|
1078
|
+
**read_s3_contents(
|
1079
|
+
s3_resource, TEST_S3_RCF_BUCKET_NAME, compaction_audit_key
|
1080
|
+
)
|
1081
|
+
)
|
1082
|
+
|
1083
|
+
# Verify that audit handles zero records correctly
|
1084
|
+
assert compaction_audit.input_records == 0
|
1085
|
+
assert compaction_audit.output_record_count == 0
|
1086
|
+
assert compaction_audit.records_deduped == 0
|
1087
|
+
assert compaction_audit.records_deleted == 0
|
1088
|
+
assert compaction_audit.untouched_record_count == 0
|
1089
|
+
assert compaction_audit.output_file_count >= 0 # May still create empty files
|
1090
|
+
record_invariant = compaction_audit.output_record_count == (
|
1091
|
+
compaction_audit.input_records
|
1092
|
+
- compaction_audit.records_deduped
|
1093
|
+
- compaction_audit.records_deleted
|
1094
|
+
+ compaction_audit.untouched_record_count
|
1095
|
+
)
|
1096
|
+
assert record_invariant is True
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/compact_partition_params.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/pyarrow_write_result.py
RENAMED
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/model/round_completion_info.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor/utils/round_completion_file.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/deletes/delete_file_envelope.py
RENAMED
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/deletes/delete_strategy.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/model/hash_bucket_input.py
RENAMED
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/model/hash_bucket_result.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/private/compaction_utils.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/compactor_v2/utils/content_type_params.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/merge_on_read/model/merge_on_read_params.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/compute/stats/models/delta_stats_cache_result.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compact_partition_rebase_test_cases.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor/steps/test_repartition.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/compactor_v2/utils/test_task_options.py
RENAMED
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/resource_estimation/data/__init__.py
RENAMED
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/resource_estimation/test_delta.py
RENAMED
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/resource_estimation/test_manifest.py
RENAMED
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_compact_partition_incremental.py
RENAMED
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_compact_partition_multiple_rounds.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{deltacat-1.1.37 → deltacat-1.1.38}/deltacat/tests/compute/test_util_create_table_deltas_repo.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|