snowflake-data-validation 1.3.4__tar.gz → 1.3.6__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 (333) hide show
  1. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/.gitignore +3 -0
  2. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/PKG-INFO +1 -1
  3. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/__version__.py +1 -1
  4. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +8 -0
  5. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +3 -9
  6. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +6 -6
  7. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +80 -4
  8. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/__init__.py +24 -6
  9. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/_internal.py +113 -1
  10. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +891 -175
  11. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +2 -0
  12. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/model/__init__.py +4 -0
  13. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +4 -0
  14. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/public/model/result_set.py +34 -0
  15. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +4 -4
  16. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/result_set_cte_generator.py +155 -0
  17. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +119 -0
  18. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_columns_cte_template.sql.j2 +8 -0
  19. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +7 -0
  20. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +39 -0
  21. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +127 -0
  22. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +82 -0
  23. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +28 -28
  24. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +12 -8
  25. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -1
  26. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -1
  27. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +35 -13
  28. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +35 -0
  29. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +4 -2
  30. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +4 -3
  31. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/constants.py +39 -0
  32. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +69 -0
  33. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +24 -0
  34. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/logging_config.py +4 -2
  35. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +246 -18
  36. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +45 -0
  37. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/telemetry.py +4 -2
  38. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +2 -2
  39. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +296 -0
  40. snowflake_data_validation-1.3.6/tests/unit/test_get_configuration_file.py +191 -0
  41. snowflake_data_validation-1.3.6/tests/unit/test_result_set_cell_level_validation.py +310 -0
  42. snowflake_data_validation-1.3.6/tests/unit/test_result_set_column_metrics_validation.py +390 -0
  43. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/LICENSE +0 -0
  44. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/README.md +0 -0
  45. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/pyproject.toml +0 -0
  46. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  47. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
  48. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
  49. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/common_cli/cli_sync_validation.py +0 -0
  50. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  51. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  52. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  53. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  54. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  55. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  56. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  57. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  58. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  59. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  60. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  61. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  62. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  63. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  64. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  65. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  66. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  67. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  68. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  69. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  70. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  71. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  72. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
  73. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
  74. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
  75. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  76. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  77. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  78. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  79. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  80. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  81. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  82. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  83. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  84. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  85. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  86. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  87. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  88. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  89. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  90. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  91. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +0 -0
  92. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  93. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  94. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  95. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  96. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  97. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/redshift_cte_generator.py +0 -0
  98. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  99. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  100. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  101. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  102. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunks_md5_table_template.sql.j2 +0 -0
  103. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  104. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_columns_cte_template.sql.j2 +0 -0
  105. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
  106. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_chunks_md5_table_template.sql.j2 +0 -0
  107. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  108. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  109. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_insert_chunk_row_md5_template.sql.j2 +0 -0
  110. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  111. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  112. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  113. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  114. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  115. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  116. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
  117. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  118. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +0 -0
  119. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  120. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  121. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  122. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  123. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  124. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  125. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  126. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  127. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/snowflake_cte_generator.py +0 -0
  128. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  129. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  130. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunks_md5_table_template.sql.j2 +0 -0
  131. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
  132. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_columns_cte_template.sql.j2 +0 -0
  133. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +0 -0
  134. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_chunks_md5_table_template.sql.j2 +0 -0
  135. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  136. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  137. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  138. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_insert_chunk_row_md5_template.sql.j2 +0 -0
  139. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  140. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  141. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  142. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  143. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  144. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  145. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  146. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  147. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  148. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +0 -0
  149. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  150. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  151. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  152. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
  153. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  154. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  155. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  156. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  157. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  158. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  159. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/sqlserver_cte_generator.py +0 -0
  160. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_chunks_md5_table_template.sql.j2 +0 -0
  161. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  162. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_columns_cte_template.sql.j2 +0 -0
  163. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  164. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  165. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_chunks_md5_table_template.sql.j2 +0 -0
  166. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  167. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  168. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  169. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  170. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  171. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  172. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  173. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  174. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  175. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  176. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
  177. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  178. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  179. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  180. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +0 -0
  181. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  182. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  183. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  184. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  185. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  186. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  187. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  188. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_chunks_md5_table_template.sql.j2 +0 -0
  189. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_columns_cte_template.sql.j2 +0 -0
  190. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
  191. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_chunks_md5_table_template.sql.j2 +0 -0
  192. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  193. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  194. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  195. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  196. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  197. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/teradata_cte_generator.py +0 -0
  198. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  199. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  200. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  201. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
  202. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  203. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  204. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  205. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +0 -0
  206. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  207. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  208. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  209. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  210. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  211. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  212. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  213. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  214. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  215. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  216. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  217. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  218. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  219. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  220. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  221. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  222. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  223. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  224. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  225. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  226. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  227. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  228. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  229. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  230. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  231. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  232. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  233. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
  234. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  235. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  236. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  237. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  238. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  239. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  240. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  241. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  242. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  243. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  244. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/.coveragerc +0 -0
  245. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/.coveragerc +0 -0
  246. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  247. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_async_generation_integration.py +0 -0
  248. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_async_validation_integration.py +0 -0
  249. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_reference_integration.py +0 -0
  250. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_source_validation_integration.py +0 -0
  251. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_sync_validation_integration.py +0 -0
  252. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
  253. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/cli/test_redshift_cli_generate_validation_scripts.py +0 -0
  254. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/cli/test_redshift_cli_get_configuration_files.py +0 -0
  255. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/cli/test_redshift_cli_run_async_validation.py +0 -0
  256. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
  257. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/cli/test_redshift_cli_run_validation_ipc.py +0 -0
  258. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  259. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  260. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  261. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  262. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  263. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/test_redshift_cte_generator.py +0 -0
  264. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/test_redshift_metrics_templates.py +0 -0
  265. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  266. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  267. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  268. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_teradata_cli.py +0 -0
  269. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_teradata_metrics_validation.py +0 -0
  270. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/__init__.py +0 -0
  271. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  272. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  273. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  274. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  275. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  276. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  277. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  278. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  279. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  280. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  281. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  282. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  283. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  284. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  285. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  286. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_arguments_manager_base.py +0 -0
  287. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_arguments_manager_factory.py +0 -0
  288. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_cell_data_validator.py +0 -0
  289. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_column_metadata.py +0 -0
  290. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_column_partitioning_strategy.py +0 -0
  291. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_comparison_orchestrator.py +0 -0
  292. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_configuration_file_editor.py +0 -0
  293. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  294. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_configuration_loader.py +0 -0
  295. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_configuration_model.py +0 -0
  296. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_connection_pool.py +0 -0
  297. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_connector_failure_tracker.py +0 -0
  298. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_connector_snowflake.py +0 -0
  299. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_console_progress_reporter.py +0 -0
  300. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_cpu_optimizer.py +0 -0
  301. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_data_validator.py +0 -0
  302. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_escape_odbc_value.py +0 -0
  303. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_executor_factory.py +0 -0
  304. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_helper_dataframe.py +0 -0
  305. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_helpers.py +0 -0
  306. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_html_report_builder.py +0 -0
  307. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_logging_config.py +0 -0
  308. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_metrics_templates.py +0 -0
  309. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_report_metadata.py +0 -0
  310. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_row_data_validator.py +0 -0
  311. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_row_partitioning_strategy.py +0 -0
  312. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_row_validation_report_buffer.py +0 -0
  313. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  314. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_snowflake_cli.py +0 -0
  315. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_source_validation_executor.py +0 -0
  316. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_sqlite_validation_connection.py +0 -0
  317. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  318. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_sqlserver_cli.py +0 -0
  319. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  320. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_table_column_metadata_model.py +0 -0
  321. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_table_configuration.py +0 -0
  322. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_table_context.py +0 -0
  323. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_table_metadata_processor.py +0 -0
  324. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_telemetry.py +0 -0
  325. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_templates_loader_manager.py +0 -0
  326. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_configuration.py +0 -0
  327. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_database_connection.py +0 -0
  328. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_execution_context.py +0 -0
  329. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_progress_reporter.py +0 -0
  330. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_report_buffer.py +0 -0
  331. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_view_configuration.py +0 -0
  332. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/utils/__init__.py +0 -0
  333. {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/utils/test_constants.py +0 -0
@@ -203,5 +203,8 @@ data-exchange-agent/src/mocked_api/*
203
203
  requirements.lock
204
204
  requirements-dev.lock
205
205
 
206
+ # E2E test session config (contains credentials)
207
+ e2e-tests/config.yaml
208
+
206
209
  # Temporary files
207
210
  temp/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-data-validation
3
- Version: 1.3.4
3
+ Version: 1.3.6
4
4
  Summary: Snowflake Data Validation
5
5
  Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
6
6
  Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
- __version__ = "1.3.4"
16
+ __version__ = "1.3.6"
@@ -84,6 +84,8 @@ class ConfigurationModel(BaseModel):
84
84
  def check_tables(self) -> None:
85
85
  table: TableConfiguration
86
86
  for table in self.tables:
87
+ if self.source_platform.lower() == Platform.TERADATA.value:
88
+ self._add_database(object=table)
87
89
  self._apply_mappings_to_table(table)
88
90
  self._check_max_failed_rows_number(table)
89
91
  self._check_chunk_number(table)
@@ -93,6 +95,8 @@ class ConfigurationModel(BaseModel):
93
95
  def check_views(self) -> None:
94
96
  view: ViewConfiguration
95
97
  for view in self.views:
98
+ if self.source_platform.lower() == Platform.TERADATA.value:
99
+ self._add_database(object=view)
96
100
  self._apply_mappings_to_view(view)
97
101
  self._check_max_failed_rows_number(view)
98
102
  self._check_chunk_number(view)
@@ -173,3 +177,7 @@ class ConfigurationModel(BaseModel):
173
177
  table.apply_metric_column_modifier = (
174
178
  self.validation_configuration.apply_metric_column_modifier
175
179
  )
180
+
181
+ def _add_database(self, object: TableConfiguration) -> None:
182
+ object.target_database = self.target_database
183
+ object._load_target_fully_qualified_name()
@@ -119,15 +119,9 @@ class TableConfiguration(BaseModel):
119
119
  self.fully_qualified_name
120
120
  )
121
121
 
122
- if len(decomposed_tuple) == 2:
123
- self.source_database = None
124
- self.source_schema = decomposed_tuple[0]
125
- self.source_table = decomposed_tuple[1]
126
-
127
- else:
128
- self.source_database = decomposed_tuple[0]
129
- self.source_schema = decomposed_tuple[1]
130
- self.source_table = decomposed_tuple[2]
122
+ self.source_database = decomposed_tuple[0]
123
+ self.source_schema = decomposed_tuple[1]
124
+ self.source_table = decomposed_tuple[2]
131
125
 
132
126
  def _load_target_fully_qualified_name(self) -> None:
133
127
  self.target_database = HelperDatabase.normalize_to_snowflake_identifier(
@@ -401,11 +401,11 @@ class SyncValidationExecutor(BaseValidationExecutor):
401
401
  "Differences found in MD5 comparison between table %s and table %s:\n%s",
402
402
  source_table_context.fully_qualified_name,
403
403
  target_table_context.fully_qualified_name,
404
- comparison_result.differences_dataframe,
404
+ comparison_result.results_dataframe,
405
405
  )
406
406
 
407
407
  self._validate_md5_rows_chunk(
408
- compared_df=comparison_result.differences_dataframe,
408
+ compared_df=comparison_result.results_dataframe,
409
409
  source_table_context=source_table_context,
410
410
  target_table_context=target_table_context,
411
411
  )
@@ -659,15 +659,15 @@ class SyncValidationExecutor(BaseValidationExecutor):
659
659
  current_chunk_id,
660
660
  source_table_context.fully_qualified_name,
661
661
  target_table_context.fully_qualified_name,
662
- rows_comparison_result.differences_dataframe,
662
+ rows_comparison_result.results_dataframe,
663
663
  )
664
664
 
665
665
  rows_compared_df = pd.concat(
666
- [rows_compared_df, rows_comparison_result.differences_dataframe]
666
+ [rows_compared_df, rows_comparison_result.results_dataframe]
667
667
  )
668
668
 
669
669
  if (
670
- len(rows_comparison_result.differences_dataframe)
670
+ len(rows_comparison_result.results_dataframe)
671
671
  >= source_table_context.max_failed_rows_number
672
672
  ):
673
673
  LOGGER.warning(
@@ -683,7 +683,7 @@ class SyncValidationExecutor(BaseValidationExecutor):
683
683
  f"Row validation between "
684
684
  f"{source_table_context.fully_qualified_name} and "
685
685
  f"{target_table_context.fully_qualified_name} was stopped because "
686
- f"the number of failed rows ({len(rows_comparison_result.differences_dataframe)}) "
686
+ f"the number of failed rows ({len(rows_comparison_result.results_dataframe)}) "
687
687
  f"reached the configured threshold "
688
688
  f"({source_table_context.max_failed_rows_number})."
689
689
  ),
@@ -6,10 +6,11 @@ The `data_validation_api.py` module provides a comprehensive set of functions fo
6
6
 
7
7
  The API supports multiple platforms via the `Platform` enum:
8
8
 
9
- - **Snowflake** (target)
9
+ - **Snowflake** (source and target)
10
10
  - **SQL Server** (source)
11
11
  - **Redshift** (source)
12
12
  - **Teradata** (source)
13
+ - **Result Set** (in-memory comparison)
13
14
 
14
15
  ---
15
16
 
@@ -83,6 +84,37 @@ Functions to execute generated queries and retrieve results.
83
84
 
84
85
  The cell validation provides a lightweight alternative to MD5-based row validation. It uses Polars for efficient vectorized comparison and returns detailed information about each differing cell including column name, row index, source value, and target value.
85
86
 
87
+ ### Step 3.2.1: Result Set Comparison
88
+
89
+ | Function | Purpose |
90
+ |----------|---------|
91
+ | `result_set_cell_level_validation()` | Compares two `ResultSet` objects and determines if they are equivalent |
92
+
93
+ This function compares the dataframes of two result sets, checking for equivalence in terms of data values (ignoring order and duplicates).
94
+
95
+ ### Step 3.3: Snapshot Validation
96
+
97
+ Functions to validate snapshots by comparing saved schema/metrics files from two tables.
98
+
99
+ | Function | Purpose |
100
+ |----------|---------|
101
+ | `validate_schema_snapshot()` | Validates schema snapshots by loading and comparing metadata from two directories (local or Snowflake stage) |
102
+ | `validate_metrics_snapshot()` | Validates metrics snapshots by loading and comparing metrics data from two directories (local or Snowflake stage) |
103
+
104
+ Both snapshot validation functions support:
105
+ - Local directories or Snowflake stages as input
106
+ - Column name mappings between source and target
107
+ - Datatype mappings for cross-platform comparisons
108
+
109
+ ---
110
+
111
+ ## Snapshot Generation
112
+
113
+ | Function | Purpose |
114
+ |----------|---------|
115
+ | `generate_snapshot()` | Generates validation snapshots to a local directory or Snowflake stage |
116
+
117
+
86
118
  ---
87
119
 
88
120
  ## Utility Functions
@@ -96,6 +128,50 @@ The cell validation provides a lightweight alternative to MD5-based row validati
96
128
 
97
129
  ---
98
130
 
131
+ ## Configuration Functions
132
+
133
+ | Function | Purpose |
134
+ |----------|---------|
135
+ | `get_configuration_file()` | Exports configuration template files (YAML and optionally Jinja2 query templates) to a specified directory |
136
+
137
+ ### get_configuration_file
138
+
139
+ Exports the YAML configuration templates and optionally the Jinja2 query templates for a specific platform to a directory. These templates can be customized for validation.
140
+
141
+ **Parameters:**
142
+ - `templates_directory: str` - Directory path where templates will be written (must exist and be writable)
143
+ - `include_query_templates: bool` - If True, includes Jinja2 (.j2) query template files
144
+ - `platform: Platform` - The source platform (SNOWFLAKE, SQLSERVER, TERADATA, REDSHIFT, RESULT_SET)
145
+
146
+ **Example:**
147
+ ```python
148
+ from snowflake.snowflake_data_validation.public import (
149
+ get_configuration_file,
150
+ Platform,
151
+ )
152
+
153
+ get_configuration_file(
154
+ templates_directory="/path/to/templates",
155
+ include_query_templates=True,
156
+ platform=Platform.SQLSERVER,
157
+ )
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Orchestration Functions
163
+
164
+ High-level functions to run complete validation workflows.
165
+
166
+ | Function | Purpose | Parameters |
167
+ |----------|---------|------------|
168
+ | `run_validation()` | Run synchronous data validation based on a configuration file | `platform: Platform`, `data_validation_config_file: str` |
169
+ | `run_async_generation()` | Generate validation scripts for later execution | `platform: Platform`, `data_validation_config_file: str` |
170
+ | `run_async_validation()` | Run asynchronous data validation | `platform: Platform`, `data_validation_config_file: str` |
171
+ | `run_source_validation()` | Execute validation queries on source only and save results as Parquet files | `platform: Platform`, `data_validation_config_file: str` |
172
+
173
+ ---
174
+
99
175
  ## Async Mode Support
100
176
 
101
177
  The API supports **asynchronous execution** where queries are written to files for later execution.
@@ -122,7 +198,7 @@ The API supports **asynchronous execution** where queries are written to files f
122
198
 
123
199
  - **`GeneratedQuery`** - Wraps a generated SQL query string
124
200
  - **`QueryExecutionResult`** - Contains a pandas or Polars DataFrame with query results
125
- - **`ValidationResult`** - Contains `is_valid` flag and `differences_dataframe`
201
+ - **`ValidationResult`** - Contains `is_valid` flag and `results_dataframe`
126
202
  - **`TableContext`** - Table metadata including platform, FQN, and configuration
127
203
  - **`TableConfiguration`** - Configuration for table validation (mappings, selections)
128
204
  - **`TableColumnMetadata`** - Structured column metadata information
@@ -145,9 +221,9 @@ The API supports **asynchronous execution** where queries are written to files f
145
221
 
146
222
  | Enum | Values |
147
223
  |------|--------|
148
- | `Platform` | SNOWFLAKE, SQLSERVER, REDSHIFT, TERADATA |
224
+ | `Platform` | SNOWFLAKE, SQLSERVER, REDSHIFT, TERADATA, RESULT_SET |
149
225
  | `Origin` | SOURCE, TARGET |
150
- | `ObjectType` | TABLE, VIEW |
226
+ | `ObjectType` | TABLE, VIEW, RESULT_SET |
151
227
  | `ExecutionMode` | SYNC, ASYNC |
152
228
 
153
229
  ---
@@ -42,9 +42,6 @@ from snowflake.snowflake_data_validation.public.data_validation_api import (
42
42
  build_validation_file_path,
43
43
  compare_md5_chunks,
44
44
  compare_md5_rows_chunk,
45
- create_source_table_context_from_configuration,
46
- create_table_context,
47
- create_target_table_context_from_configuration,
48
45
  execute_query,
49
46
  execute_query_from_table_configuration,
50
47
  execute_statement,
@@ -59,14 +56,24 @@ from snowflake.snowflake_data_validation.public.data_validation_api import (
59
56
  generate_metrics_query,
60
57
  generate_row_count_query,
61
58
  generate_schema_query,
59
+ generate_snapshot,
62
60
  generate_view_materialization_query,
61
+ get_configuration_file,
63
62
  load_validation_result_from_file,
64
63
  load_validation_results,
65
64
  process_table_column_metadata,
66
65
  process_target_table_column_metadata_from_source_table,
66
+ result_set_cell_level_validation,
67
+ result_set_metrics_level_validation,
68
+ run_async_generation,
69
+ run_async_validation,
70
+ run_source_validation,
71
+ run_validation,
67
72
  validate_cell,
68
73
  validate_metrics,
74
+ validate_metrics_snapshot,
69
75
  validate_schema,
76
+ validate_schema_snapshot,
70
77
  write_metrics_query_to_script,
71
78
  write_schema_query_to_script,
72
79
  write_view_materialization_query_to_script,
@@ -80,6 +87,7 @@ from snowflake.snowflake_data_validation.public.model import (
80
87
  GeneratedQuery,
81
88
  QueryExecutionResult,
82
89
  ValidationResult,
90
+ ResultSet,
83
91
  )
84
92
 
85
93
  # =============================================================================
@@ -90,6 +98,7 @@ from snowflake.snowflake_data_validation.public.enums import (
90
98
  ObjectType,
91
99
  Origin,
92
100
  Platform,
101
+ ValidationLevel,
93
102
  )
94
103
 
95
104
  # =============================================================================
@@ -158,9 +167,6 @@ __all__ = [
158
167
  "build_validation_file_path",
159
168
  "compare_md5_chunks",
160
169
  "compare_md5_rows_chunk",
161
- "create_source_table_context_from_configuration",
162
- "create_table_context",
163
- "create_target_table_context_from_configuration",
164
170
  "execute_query",
165
171
  "execute_query_from_table_configuration",
166
172
  "execute_statement",
@@ -175,14 +181,24 @@ __all__ = [
175
181
  "generate_metrics_query",
176
182
  "generate_row_count_query",
177
183
  "generate_schema_query",
184
+ "generate_snapshot",
178
185
  "generate_view_materialization_query",
186
+ "get_configuration_file",
179
187
  "load_validation_result_from_file",
180
188
  "load_validation_results",
181
189
  "process_table_column_metadata",
182
190
  "process_target_table_column_metadata_from_source_table",
191
+ "result_set_cell_level_validation",
192
+ "result_set_metrics_level_validation",
193
+ "run_async_generation",
194
+ "run_async_validation",
195
+ "run_source_validation",
196
+ "run_validation",
183
197
  "validate_cell",
184
198
  "validate_metrics",
199
+ "validate_metrics_snapshot",
185
200
  "validate_schema",
201
+ "validate_schema_snapshot",
186
202
  "write_metrics_query_to_script",
187
203
  "write_schema_query_to_script",
188
204
  "write_view_materialization_query_to_script",
@@ -202,6 +218,7 @@ __all__ = [
202
218
  "TableContext",
203
219
  "ColumnMetadata",
204
220
  "TableColumnMetadata",
221
+ "ResultSet",
205
222
  "ConnectorBase",
206
223
  "ConnectorRedshift",
207
224
  "ConnectorSnowflake",
@@ -215,4 +232,5 @@ __all__ = [
215
232
  "TeradataConnectorFactory",
216
233
  "SQLQueriesTemplateGenerator",
217
234
  "TemplatesLoaderManager",
235
+ "ValidationLevel",
218
236
  ]
@@ -27,6 +27,7 @@ from __future__ import annotations
27
27
  import os
28
28
 
29
29
  from collections.abc import Callable
30
+ from pathlib import Path
30
31
 
31
32
  import pandas as pd
32
33
 
@@ -39,7 +40,23 @@ from snowflake.snowflake_data_validation.public.model import (
39
40
  GeneratedQuery,
40
41
  QueryExecutionResult,
41
42
  )
42
- from snowflake.snowflake_data_validation.utils.constants import Platform
43
+ from snowflake.snowflake_data_validation.snowflake.connector.connector_snowflake import (
44
+ ConnectorSnowflake,
45
+ )
46
+ from snowflake.snowflake_data_validation.utils.constants import (
47
+ Platform,
48
+ ValidationLevel,
49
+ )
50
+ from snowflake.snowflake_data_validation.utils.helpers.helper_database import (
51
+ HelperDatabase,
52
+ )
53
+ from snowflake.snowflake_data_validation.utils.helpers.helper_dataframe import (
54
+ HelperDataFrame,
55
+ )
56
+ from snowflake.snowflake_data_validation.utils.snapshot_validation_statements import (
57
+ CREATE_SNOWFLAKE_FILE_FORMAT_STATEMENT,
58
+ SNAPSHOT_PARQUET_DATA_STATEMENT_FORMAT_SELECT,
59
+ )
43
60
 
44
61
 
45
62
  def execute_query_internal(
@@ -226,3 +243,98 @@ def get_target_cols(
226
243
  n_col = case_sensitive_dict.get(col.upper())
227
244
  res.append(n_col)
228
245
  return res
246
+
247
+
248
+ def is_snowflake_stage(path: str) -> bool:
249
+ """Check if the path is a Snowflake stage reference."""
250
+ return path.strip().startswith("@")
251
+
252
+
253
+ def upload_to_stage(connector: ConnectorBase, local_file: str, stage: str) -> str:
254
+ """Upload a local file to a Snowflake stage using PUT command.
255
+
256
+ Args:
257
+ connector: The Snowflake connector instance
258
+ local_file: Path to the local file to upload
259
+ stage: The Snowflake stage path (e.g., @my_stage/output/)
260
+
261
+ """
262
+ put_command = (
263
+ f"PUT 'file://{local_file}' '{stage}' AUTO_COMPRESS=FALSE OVERWRITE=TRUE"
264
+ )
265
+ connector.execute_statement(put_command)
266
+ file_output = f"{stage}{os.path.basename(local_file)}"
267
+ return file_output
268
+
269
+
270
+ def load_snapshot_dataframe(
271
+ directory: str,
272
+ file_name: str,
273
+ validation_level: ValidationLevel,
274
+ snowflake_stage_connector: ConnectorSnowflake,
275
+ ) -> pd.DataFrame:
276
+ is_stage = is_snowflake_stage(directory)
277
+ if is_stage:
278
+ dataframe = load_snapshot_dataframe_from_stage(
279
+ stage=directory,
280
+ file_name=file_name,
281
+ validation_level=validation_level,
282
+ snowflake_stage_connector=snowflake_stage_connector,
283
+ )
284
+ return dataframe
285
+ else:
286
+ dataframe = load_snapshot_dataframe_from_local_file(
287
+ directory=directory,
288
+ file_name=file_name,
289
+ )
290
+ return dataframe
291
+
292
+
293
+ def load_snapshot_dataframe_from_local_file(
294
+ directory: str,
295
+ file_name: str,
296
+ ) -> pd.DataFrame:
297
+ directory_path = Path(directory)
298
+ if not directory_path.is_dir():
299
+ raise ValueError(f"Directory does not exist: {directory}")
300
+
301
+ file_path = directory_path / file_name
302
+
303
+ if not file_path.is_file():
304
+ raise ValueError(f"Snapshot file does not exist: {file_path}")
305
+
306
+ dataframe = pd.read_parquet(file_path)
307
+ return dataframe
308
+
309
+
310
+ def load_snapshot_dataframe_from_stage(
311
+ stage: str,
312
+ file_name: str,
313
+ validation_level: ValidationLevel,
314
+ snowflake_stage_connector: ConnectorSnowflake,
315
+ ) -> pd.DataFrame:
316
+ normalized_stage = HelperDatabase.normalize_snowflake_stage(stage)
317
+ stage_file = normalized_stage + file_name
318
+
319
+ if not file_exists_in_stage(stage_file, snowflake_stage_connector):
320
+ raise ValueError(f"Snapshot file does not exist in stage: {stage_file}")
321
+
322
+ select_parquet_data_format = SNAPSHOT_PARQUET_DATA_STATEMENT_FORMAT_SELECT[
323
+ validation_level
324
+ ]
325
+ select_parquet_data_statement = select_parquet_data_format.format(
326
+ stage_file=stage_file
327
+ )
328
+ snowflake_stage_connector.execute_statement(CREATE_SNOWFLAKE_FILE_FORMAT_STATEMENT)
329
+ result = snowflake_stage_connector.execute_query(select_parquet_data_statement)
330
+ dataframe = HelperDataFrame().process_snowflake_query_result_to_dataframe(result)
331
+ return dataframe
332
+
333
+
334
+ def file_exists_in_stage(
335
+ stage_file: str, snowflake_stage_connector: ConnectorSnowflake
336
+ ) -> bool:
337
+ list_statement = f"LIST {stage_file}"
338
+ result = snowflake_stage_connector.execute_query(list_statement)
339
+ dataframe = HelperDataFrame().process_snowflake_query_result_to_dataframe(result)
340
+ return not dataframe.empty