supertable 2.2.1__tar.gz → 2.2.2__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.
Files changed (184) hide show
  1. {supertable-2.2.1/supertable.egg-info → supertable-2.2.2}/PKG-INFO +1 -1
  2. {supertable-2.2.1 → supertable-2.2.2}/pyproject.toml +1 -1
  3. {supertable-2.2.1 → supertable-2.2.2}/setup.py +1 -1
  4. {supertable-2.2.1 → supertable-2.2.2}/supertable/__init__.py +1 -1
  5. {supertable-2.2.1 → supertable-2.2.2}/supertable/data_writer.py +37 -20
  6. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/defaults.py +1 -1
  7. {supertable-2.2.1 → supertable-2.2.2}/supertable/processing.py +280 -171
  8. {supertable-2.2.1 → supertable-2.2.2}/supertable/simple_table.py +29 -18
  9. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_newer_than.py +1 -1
  10. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_process_delete_only.py +2 -2
  11. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_small_file_compaction.py +2 -2
  12. supertable-2.2.2/supertable/utils/profiler.py +116 -0
  13. {supertable-2.2.1 → supertable-2.2.2/supertable.egg-info}/PKG-INFO +1 -1
  14. {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/SOURCES.txt +1 -0
  15. {supertable-2.2.1 → supertable-2.2.2}/LICENSE +0 -0
  16. {supertable-2.2.1 → supertable-2.2.2}/README.md +0 -0
  17. {supertable-2.2.1 → supertable-2.2.2}/requirements.txt +0 -0
  18. {supertable-2.2.1 → supertable-2.2.2}/setup.cfg +0 -0
  19. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/__init__.py +0 -0
  20. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/admin.py +0 -0
  21. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/chain.py +0 -0
  22. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/consumers.py +0 -0
  23. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/crypto.py +0 -0
  24. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/events.py +0 -0
  25. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/export.py +0 -0
  26. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/logger.py +0 -0
  27. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/middleware.py +0 -0
  28. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/reader.py +0 -0
  29. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/retention.py +0 -0
  30. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/__init__.py +0 -0
  31. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_chain.py +0 -0
  32. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_crypto.py +0 -0
  33. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_emit.py +0 -0
  34. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_events.py +0 -0
  35. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_retention.py +0 -0
  36. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/writer_parquet.py +0 -0
  37. {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/writer_redis.py +0 -0
  38. {supertable-2.2.1 → supertable-2.2.2}/supertable/config/__init__.py +0 -0
  39. {supertable-2.2.1 → supertable-2.2.2}/supertable/config/defaults.py +0 -0
  40. {supertable-2.2.1 → supertable-2.2.2}/supertable/config/homedir.py +0 -0
  41. {supertable-2.2.1 → supertable-2.2.2}/supertable/config/settings.py +0 -0
  42. {supertable-2.2.1 → supertable-2.2.2}/supertable/config/tests/__init__.py +0 -0
  43. {supertable-2.2.1 → supertable-2.2.2}/supertable/config/tests/test_defaults.py +0 -0
  44. {supertable-2.2.1 → supertable-2.2.2}/supertable/config/tests/test_homedir.py +0 -0
  45. {supertable-2.2.1 → supertable-2.2.2}/supertable/config/tests/test_settings.py +0 -0
  46. {supertable-2.2.1 → supertable-2.2.2}/supertable/data_classes.py +0 -0
  47. {supertable-2.2.1 → supertable-2.2.2}/supertable/data_reader.py +0 -0
  48. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/__init__.py +0 -0
  49. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/__init__.py +0 -0
  50. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/__main__.py +0 -0
  51. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/check_filter_builder.py +0 -0
  52. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/controller.py +0 -0
  53. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/data_writer_helpers.py +0 -0
  54. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/defaults.py +0 -0
  55. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/dummy_data.py +0 -0
  56. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/read_parquet_header.py +0 -0
  57. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s01_01_01_create_super_table.py +0 -0
  58. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s01_01_02_enable_mirroring_formats.py +0 -0
  59. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s01_02_create_roles.py +0 -0
  60. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s01_03_create_users.py +0 -0
  61. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_01_write_dummy_data.py +0 -0
  62. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_02_write_single_data.py +0 -0
  63. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_03_01_write_staging.py +0 -0
  64. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_03_02_create_pipe.py +0 -0
  65. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_04_01_write_monitoring_simple.py +0 -0
  66. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_04_02_write_monitoring_parallel.py +0 -0
  67. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_05_write_tombstone.py +0 -0
  68. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_01_read_data_error.py +0 -0
  69. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_02_01_read_super_data_ok.py +0 -0
  70. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_02_02_read_table_data_ok.py +0 -0
  71. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_03_read_meta.py +0 -0
  72. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_04_read_staging.py +0 -0
  73. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_06_01_read_roles.py +0 -0
  74. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_06_02_read_user.py +0 -0
  75. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_07_01_estimate_read.py +0 -0
  76. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_07_02_estimate_files.py +0 -0
  77. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_08_read_snapshot_history.py +0 -0
  78. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s04_01_03_delete_pipe.py +0 -0
  79. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s05_01_delete_table.py +0 -0
  80. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s05_02_delete_super_table.py +0 -0
  81. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/__init__.py +0 -0
  82. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/core.py +0 -0
  83. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/generate.py +0 -0
  84. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/load.py +0 -0
  85. {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/topup.py +0 -0
  86. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/__init__.py +0 -0
  87. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/data_estimator.py +0 -0
  88. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/duckdb_lite.py +0 -0
  89. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/duckdb_pro.py +0 -0
  90. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/engine_common.py +0 -0
  91. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/engine_enum.py +0 -0
  92. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/executor.py +0 -0
  93. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/plan_stats.py +0 -0
  94. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/spark_thrift.py +0 -0
  95. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/tests/__init__.py +0 -0
  96. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/tests/conftest.py +0 -0
  97. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/tests/test_dedup_read.py +0 -0
  98. {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/tests/test_engine.py +0 -0
  99. {supertable-2.2.1 → supertable-2.2.2}/supertable/errors.py +0 -0
  100. {supertable-2.2.1 → supertable-2.2.2}/supertable/gc/__init__.py +0 -0
  101. {supertable-2.2.1 → supertable-2.2.2}/supertable/gc/cleaner.py +0 -0
  102. {supertable-2.2.1 → supertable-2.2.2}/supertable/gc/daemon.py +0 -0
  103. {supertable-2.2.1 → supertable-2.2.2}/supertable/gc/queue.py +0 -0
  104. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/__init__.py +0 -0
  105. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/benchmarks/__init__.py +0 -0
  106. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/benchmarks/benchmark_locking.py +0 -0
  107. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/benchmarks/measure_lock_speed.py +0 -0
  108. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/benchmarks/measure_lock_time.py +0 -0
  109. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/file_lock.py +0 -0
  110. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/redis_lock.py +0 -0
  111. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/tests/__init__.py +0 -0
  112. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/tests/test_file_lock.py +0 -0
  113. {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/tests/test_redis_lock.py +0 -0
  114. {supertable-2.2.1 → supertable-2.2.2}/supertable/logging.py +0 -0
  115. {supertable-2.2.1 → supertable-2.2.2}/supertable/meta_reader.py +0 -0
  116. {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/__init__.py +0 -0
  117. {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/mirror_delta.py +0 -0
  118. {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/mirror_formats.py +0 -0
  119. {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/mirror_iceberg.py +0 -0
  120. {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/mirror_parquet.py +0 -0
  121. {supertable-2.2.1 → supertable-2.2.2}/supertable/monitoring/__init__.py +0 -0
  122. {supertable-2.2.1 → supertable-2.2.2}/supertable/monitoring/partitions.py +0 -0
  123. {supertable-2.2.1 → supertable-2.2.2}/supertable/monitoring_writer.py +0 -0
  124. {supertable-2.2.1 → supertable-2.2.2}/supertable/plan_extender.py +0 -0
  125. {supertable-2.2.1 → supertable-2.2.2}/supertable/query_plan_manager.py +0 -0
  126. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/__init__.py +0 -0
  127. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/access_control.py +0 -0
  128. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/filter_builder.py +0 -0
  129. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/permissions.py +0 -0
  130. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/role_manager.py +0 -0
  131. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/row_column_security.py +0 -0
  132. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/tests/test_filter_builder.py +0 -0
  133. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/tests/test_rbac.py +0 -0
  134. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/tests/test_rbac_per_table.py +0 -0
  135. {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/user_manager.py +0 -0
  136. {supertable-2.2.1 → supertable-2.2.2}/supertable/redis_catalog.py +0 -0
  137. {supertable-2.2.1 → supertable-2.2.2}/supertable/redis_connector.py +0 -0
  138. {supertable-2.2.1 → supertable-2.2.2}/supertable/redis_infra.py +0 -0
  139. {supertable-2.2.1 → supertable-2.2.2}/supertable/redis_keys.py +0 -0
  140. {supertable-2.2.1 → supertable-2.2.2}/supertable/staging_area.py +0 -0
  141. {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/__init__.py +0 -0
  142. {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/azure_storage.py +0 -0
  143. {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/gcp_storage.py +0 -0
  144. {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/local_storage.py +0 -0
  145. {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/minio_storage.py +0 -0
  146. {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/s3_storage.py +0 -0
  147. {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/storage_factory.py +0 -0
  148. {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/storage_interface.py +0 -0
  149. {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/tests/test_storage.py +0 -0
  150. {supertable-2.2.1 → supertable-2.2.2}/supertable/super_pipe.py +0 -0
  151. {supertable-2.2.1 → supertable-2.2.2}/supertable/super_table.py +0 -0
  152. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/__init__.py +0 -0
  153. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_align_to_schema_fix.py +0 -0
  154. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_create_if_missing.py +0 -0
  155. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_reader.py +0 -0
  156. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_reader_preflight.py +0 -0
  157. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_writer.py +0 -0
  158. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_writer_compact.py +0 -0
  159. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_writer_comprehensive.py +0 -0
  160. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_writer_tombstones.py +0 -0
  161. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_dedup_on_read_write.py +0 -0
  162. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_errors.py +0 -0
  163. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_gc_cleaner.py +0 -0
  164. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_gc_daemon.py +0 -0
  165. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_gc_queue.py +0 -0
  166. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_meta_reader.py +0 -0
  167. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_monitoring_partitions.py +0 -0
  168. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_monitoring_sink_guard.py +0 -0
  169. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_processing.py +0 -0
  170. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_processing_compact_resources.py +0 -0
  171. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_query_sql.py +0 -0
  172. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_redis_key_prefix.py +0 -0
  173. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_simple_table.py +0 -0
  174. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_super_table.py +0 -0
  175. {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_supertable_all.py +0 -0
  176. {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/__init__.py +0 -0
  177. {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/helper.py +0 -0
  178. {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/sql_parser.py +0 -0
  179. {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/tests/test_sql_parser_columns.py +0 -0
  180. {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/timer.py +0 -0
  181. {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/dependency_links.txt +0 -0
  182. {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/entry_points.txt +0 -0
  183. {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/requires.txt +0 -0
  184. {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supertable
3
- Version: 2.2.1
3
+ Version: 2.2.2
4
4
  Summary: SuperTable — versioned data lake library for SQL analytics on Parquet + Redis.
5
5
  Author: Levente Kupas
6
6
  Author-email: Levente Kupas <lkupas@kladnasoft.com>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "supertable"
7
- version = "2.2.1"
7
+ version = "2.2.2"
8
8
  description = "SuperTable — versioned data lake library for SQL analytics on Parquet + Redis."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -19,7 +19,7 @@ long_description = readme.read_text(encoding="utf-8") if readme.exists() else ""
19
19
 
20
20
  setup(
21
21
  name="supertable",
22
- version="2.2.1",
22
+ version="2.2.2",
23
23
  description="SuperTable — versioned data lake library for SQL analytics on Parquet + Redis.",
24
24
  long_description=long_description,
25
25
  long_description_content_type="text/markdown",
@@ -25,7 +25,7 @@ See the ``supertable.demo`` package for runnable end-to-end demos and the
25
25
  project documentation for the full API surface.
26
26
  """
27
27
 
28
- __version__ = "2.2.1"
28
+ __version__ = "2.2.2"
29
29
 
30
30
  # Re-export the core public surface so users can do ``from supertable import …``
31
31
  # instead of remembering submodule paths.
@@ -20,6 +20,7 @@ from supertable.super_table import SuperTable
20
20
  from supertable import redis_keys as RK
21
21
  from supertable.simple_table import SimpleTable
22
22
  from supertable.utils.timer import Timer
23
+ from supertable.utils.profiler import Profiler
23
24
  from supertable.processing import (
24
25
  process_overlapping_files,
25
26
  process_delete_only,
@@ -277,7 +278,11 @@ class DataWriter:
277
278
 
278
279
  t0 = time.time()
279
280
  t_last = t0
280
- timings = {}
281
+ profiler = Profiler()
282
+ # Convenience view: top-level stages still indexed by the original
283
+ # short names ("lock", "snapshot", "overlap", ...) so the existing
284
+ # log line keeps working unchanged.
285
+ timings = profiler.timings
281
286
 
282
287
  def mark(stage: str):
283
288
  nonlocal t_last
@@ -338,6 +343,7 @@ class DataWriter:
338
343
  overlapping_files = find_overlapping_files(
339
344
  last_simple_table, dataframe, overwrite_columns, locking=None,
340
345
  table_config=table_config,
346
+ profiler=profiler,
341
347
  )
342
348
  mark("overlap")
343
349
 
@@ -354,6 +360,7 @@ class DataWriter:
354
360
  overwrite_columns=overwrite_columns,
355
361
  newer_than_col=newer_than,
356
362
  file_cache=file_cache,
363
+ profiler=profiler,
357
364
  )
358
365
  skipped = pre_filter_count - dataframe.height
359
366
  if skipped > 0:
@@ -385,6 +392,8 @@ class DataWriter:
385
392
  "skipped_stale": skipped,
386
393
  "lineage": _safe_json(lineage or {}),
387
394
  "duration": round(time.time() - t0, 6),
395
+ "timings": profiler.emit_timings(),
396
+ "counts": profiler.emit_counts(),
388
397
  }
389
398
  # Don't return here — fall through to finally (lock release)
390
399
  # and the post-finally monitoring block. Returning inside the
@@ -431,6 +440,7 @@ class DataWriter:
431
440
  data_dir=simple_table.data_dir,
432
441
  compression_level=compression_level,
433
442
  table_config=table_config,
443
+ profiler=profiler,
434
444
  )
435
445
  new_resources = compact_resources
436
446
  sunset_files = compact_sunset
@@ -474,6 +484,7 @@ class DataWriter:
474
484
  simple_table.data_dir,
475
485
  compression_level,
476
486
  file_cache=file_cache,
487
+ profiler=profiler,
477
488
  )
478
489
  else:
479
490
  inserted, deleted, total_rows, total_columns, new_resources, sunset_files = process_overlapping_files(
@@ -484,6 +495,7 @@ class DataWriter:
484
495
  compression_level,
485
496
  file_cache=file_cache,
486
497
  table_config=table_config,
498
+ profiler=profiler,
487
499
  )
488
500
  mark("process")
489
501
 
@@ -514,6 +526,7 @@ class DataWriter:
514
526
  last_snapshot=last_simple_table,
515
527
  last_snapshot_path=last_simple_table_path,
516
528
  lineage=eff_lineage,
529
+ profiler=profiler,
517
530
  )
518
531
  mark("update_simple")
519
532
 
@@ -534,26 +547,28 @@ class DataWriter:
534
547
  ],
535
548
  }
536
549
 
537
- try:
538
- self.catalog.set_leaf_payload_cas(
539
- self.super_table.organization,
540
- self.super_table.super_name,
541
- simple_name,
542
- payload,
543
- new_snapshot_path,
544
- now_ms=now_ms,
545
- )
546
- except Exception:
547
- # Backward compatible fallback.
548
- self.catalog.set_leaf_path_cas(
549
- self.super_table.organization,
550
- self.super_table.super_name,
551
- simple_name,
552
- new_snapshot_path,
553
- now_ms=now_ms,
554
- )
550
+ with profiler.span("redis.set_leaf"):
551
+ try:
552
+ self.catalog.set_leaf_payload_cas(
553
+ self.super_table.organization,
554
+ self.super_table.super_name,
555
+ simple_name,
556
+ payload,
557
+ new_snapshot_path,
558
+ now_ms=now_ms,
559
+ )
560
+ except Exception:
561
+ # Backward compatible fallback.
562
+ self.catalog.set_leaf_path_cas(
563
+ self.super_table.organization,
564
+ self.super_table.super_name,
565
+ simple_name,
566
+ new_snapshot_path,
567
+ now_ms=now_ms,
568
+ )
555
569
 
556
- self.catalog.bump_root(self.super_table.organization, self.super_table.super_name, now_ms=now_ms)
570
+ with profiler.span("redis.bump_root"):
571
+ self.catalog.bump_root(self.super_table.organization, self.super_table.super_name, now_ms=now_ms)
557
572
  mark("bump_root")
558
573
 
559
574
  # --- Enqueue deferred deletions (post-CAS, post-bump) ----------
@@ -649,6 +664,8 @@ class DataWriter:
649
664
  "skipped_stale": 0,
650
665
  "lineage": _safe_json(lineage or {}),
651
666
  "duration": round(time.time() - t0, 6),
667
+ "timings": profiler.emit_timings(),
668
+ "counts": profiler.emit_counts(),
652
669
  }
653
670
  mark("prepare_monitor")
654
671
 
@@ -10,7 +10,7 @@ Used by:
10
10
 
11
11
  # --- SuperTable connection settings ---
12
12
  organization: str = "kladna-soft"
13
- super_name: str = "example"
13
+ super_name: str = "webshop"
14
14
  role_name: str = "superadmin"
15
15
 
16
16
  # --- Data generation / loading settings ---