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.
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/.gitignore +3 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/PKG-INFO +1 -1
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/__version__.py +1 -1
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +8 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +3 -9
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +6 -6
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/__init__.py +24 -6
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/_internal.py +113 -1
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +891 -175
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +2 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/model/__init__.py +4 -0
- {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
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/public/model/result_set.py +34 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +4 -4
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/result_set_cte_generator.py +155 -0
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +119 -0
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_columns_cte_template.sql.j2 +8 -0
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +7 -0
- 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
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +127 -0
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +82 -0
- {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
- {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
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +35 -13
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +35 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +4 -2
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +4 -3
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/constants.py +39 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +69 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +24 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/logging_config.py +4 -2
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +246 -18
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +45 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/telemetry.py +4 -2
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +2 -2
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +296 -0
- snowflake_data_validation-1.3.6/tests/unit/test_get_configuration_file.py +191 -0
- snowflake_data_validation-1.3.6/tests/unit/test_result_set_cell_level_validation.py +310 -0
- snowflake_data_validation-1.3.6/tests/unit/test_result_set_column_metrics_validation.py +390 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/LICENSE +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/README.md +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/pyproject.toml +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {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
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
- {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
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/test_redshift_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Redshift/test_redshift_metrics_templates.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_teradata_cli.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/Teradata/test_teradata_metrics_validation.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {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
- {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
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_data_validator.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_metrics_templates.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_snowflake_cli.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_sqlserver_cli.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.3.4 → snowflake_data_validation-1.3.6}/tests/unit/utils/test_constants.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.3.
|
|
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/
|
|
@@ -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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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.
|
|
404
|
+
comparison_result.results_dataframe,
|
|
405
405
|
)
|
|
406
406
|
|
|
407
407
|
self._validate_md5_rows_chunk(
|
|
408
|
-
compared_df=comparison_result.
|
|
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.
|
|
662
|
+
rows_comparison_result.results_dataframe,
|
|
663
663
|
)
|
|
664
664
|
|
|
665
665
|
rows_compared_df = pd.concat(
|
|
666
|
-
[rows_compared_df, rows_comparison_result.
|
|
666
|
+
[rows_compared_df, rows_comparison_result.results_dataframe]
|
|
667
667
|
)
|
|
668
668
|
|
|
669
669
|
if (
|
|
670
|
-
len(rows_comparison_result.
|
|
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.
|
|
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 `
|
|
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.
|
|
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
|