snowflake-data-validation 1.3.6__tar.gz → 1.3.7__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.6 → snowflake_data_validation-1.3.7}/.gitignore +7 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/PKG-INFO +2 -1
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/pyproject.toml +1 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/__version__.py +1 -1
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +5 -6
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +5 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/connector/connector_base.py +1 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +31 -7
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +29 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +14 -3
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +9 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -26
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +14 -2
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/__init__.py +10 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +287 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +324 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +4 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +1 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/extractor/query_cte_generator.py +149 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +151 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +89 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +20 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +17 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +4 -3
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +8 -8
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +119 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_columns_cte_template.sql.j2 +8 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +7 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +24 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +15 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +4 -4
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +1 -1
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +30 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +18 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +13 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +18 -18
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +3 -3
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +1 -1
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +2 -2
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +10 -6
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +4 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/teradata_cte_generator.py +2 -2
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +49 -4
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +16 -3
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +4 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/constants.py +5 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +50 -0
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/validation/result_set_validator.py → snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +159 -126
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +18 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/validation/query_validator.py +184 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +180 -0
- snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +385 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/query/test_query_generator_redshift.py +3 -2
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_query_generator_teradata.py +67 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_teradata_metrics_validation.py +5 -5
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +1 -1
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_cell_data_validator.py +94 -0
- snowflake_data_validation-1.3.7/tests/unit/test_cell_validation_query_generation.py +148 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_configuration_loader.py +1 -1
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_data_validator.py +29 -0
- snowflake_data_validation-1.3.7/tests/unit/test_query_cell_level_validation.py +353 -0
- snowflake_data_validation-1.3.7/tests/unit/test_query_metrics_level_validation.py +377 -0
- snowflake_data_validation-1.3.7/tests/unit/test_query_to_dataframe.py +167 -0
- snowflake_data_validation-1.3.7/tests/unit/test_query_validator.py +156 -0
- snowflake_data_validation-1.3.7/tests/unit/test_result_set_to_dataframe.py +392 -0
- snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -201
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/LICENSE +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/README.md +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/common_cli/cli_sync_validation.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- /snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml → /snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- /snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_columns_cte_template.sql.j2 → /snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/extractor/templates/query_columns_cte_template.sql.j2 +0 -0
- /snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml → /snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/redshift_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_columns_cte_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_insert_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/result_set/extractor/result_set_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/snowflake_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_columns_cte_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_insert_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/sqlserver_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_columns_cte_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_columns_cte_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_chunks_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_generate_validation_scripts.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_get_configuration_files.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_run_async_validation.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_run_validation_ipc.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/test_redshift_cte_generator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/test_redshift_metrics_templates.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_teradata_cli.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_metrics_templates.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_snowflake_cli.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_sqlserver_cli.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/utils/test_constants.py +0 -0
|
@@ -195,6 +195,12 @@ cython_debug/
|
|
|
195
195
|
# Requirements file generated by pip-compile
|
|
196
196
|
requirements.txt
|
|
197
197
|
|
|
198
|
+
# Streamlit in Snowflake: baked metadata (generated at deploy; not committed)
|
|
199
|
+
data-migration-orchestrator/src/data_migration_orchestrator/data_migration_cloud/dashboard/_streamlit_baked_metadata.py
|
|
200
|
+
data-migration-orchestrator/src/data_migration_orchestrator/data_validation_cloud/dashboard/_streamlit_baked_metadata.py
|
|
201
|
+
data-migration-orchestrator/src/data_migration_orchestrator/data_migration_cloud/dashboard/sis_streamlit_metadata.py
|
|
202
|
+
data-migration-orchestrator/src/data_migration_orchestrator/data_validation_cloud/dashboard/sis_streamlit_metadata.py
|
|
203
|
+
|
|
198
204
|
# Data Exchange Agent
|
|
199
205
|
data-exchange-agent/src/mocked_api/*
|
|
200
206
|
.vscode
|
|
@@ -208,3 +214,4 @@ e2e-tests/config.yaml
|
|
|
208
214
|
|
|
209
215
|
# Temporary files
|
|
210
216
|
temp/
|
|
217
|
+
.worktrees/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.7
|
|
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/
|
|
@@ -26,6 +26,7 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
26
26
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
27
27
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
28
28
|
Requires-Python: >=3.10
|
|
29
|
+
Requires-Dist: connectorx>=0.3.0
|
|
29
30
|
Requires-Dist: cryptography>=3.4.0
|
|
30
31
|
Requires-Dist: deepdiff>=8.0.0
|
|
31
32
|
Requires-Dist: jinja2>=3.1.6
|
|
@@ -84,7 +84,7 @@ 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.
|
|
87
|
+
if self.source_platform.casefold() == Platform.TERADATA.value.casefold():
|
|
88
88
|
self._add_database(object=table)
|
|
89
89
|
self._apply_mappings_to_table(table)
|
|
90
90
|
self._check_max_failed_rows_number(table)
|
|
@@ -95,7 +95,7 @@ class ConfigurationModel(BaseModel):
|
|
|
95
95
|
def check_views(self) -> None:
|
|
96
96
|
view: ViewConfiguration
|
|
97
97
|
for view in self.views:
|
|
98
|
-
if self.source_platform.
|
|
98
|
+
if self.source_platform.casefold() == Platform.TERADATA.value.casefold():
|
|
99
99
|
self._add_database(object=view)
|
|
100
100
|
self._apply_mappings_to_view(view)
|
|
101
101
|
self._check_max_failed_rows_number(view)
|
|
@@ -153,10 +153,9 @@ class ConfigurationModel(BaseModel):
|
|
|
153
153
|
view._load_target_fully_qualified_name()
|
|
154
154
|
|
|
155
155
|
# Set internal identifiers for SQL Server platform to handle special identifier formatting.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
)
|
|
156
|
+
view._set_internal_identifiers(
|
|
157
|
+
source_platform=Platform(self.source_platform.lower())
|
|
158
|
+
)
|
|
160
159
|
|
|
161
160
|
def _check_max_failed_rows_number(self, table: TableConfiguration) -> None:
|
|
162
161
|
if table.max_failed_rows_number is None:
|
|
@@ -49,6 +49,10 @@ class ViewConfiguration(TableConfiguration):
|
|
|
49
49
|
self.internal_source_table = self.source_table
|
|
50
50
|
self.internal_target_name = self.target_name
|
|
51
51
|
|
|
52
|
+
# Skip internal identifiers generation for Teradata views, because temporary table is not necessary.
|
|
53
|
+
if source_platform == Platform.TERADATA:
|
|
54
|
+
return
|
|
55
|
+
|
|
52
56
|
# Apply quoting if original identifier was non-regular
|
|
53
57
|
source_needs_quotes = HelperDatabase.is_delimited_identifier(self.source_table)
|
|
54
58
|
target_needs_quotes = HelperDatabase.is_delimited_identifier(self.target_name)
|
|
@@ -89,6 +93,7 @@ class ViewConfiguration(TableConfiguration):
|
|
|
89
93
|
self.internal_fully_qualified_name = (
|
|
90
94
|
f"{self.source_database}.{self.source_schema}.{self.internal_source_table}"
|
|
91
95
|
)
|
|
96
|
+
|
|
92
97
|
self.internal_target_fully_qualified_name = (
|
|
93
98
|
f"{self.target_database}.{self.target_schema}.{self.internal_target_name}"
|
|
94
99
|
)
|
|
@@ -47,6 +47,8 @@ from snowflake.snowflake_data_validation.utils.base_output_handler import (
|
|
|
47
47
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
48
48
|
CHUNK_ID_COLUMN_KEY,
|
|
49
49
|
DEFAULT_TOLERANCE,
|
|
50
|
+
ObjectType,
|
|
51
|
+
Platform,
|
|
50
52
|
Result,
|
|
51
53
|
ValidationLevel,
|
|
52
54
|
)
|
|
@@ -122,6 +124,16 @@ class SyncValidationExecutor(BaseValidationExecutor):
|
|
|
122
124
|
result_processor=self.source_extractor.process_schema_query_result,
|
|
123
125
|
)
|
|
124
126
|
|
|
127
|
+
# Teradata view validation does not need view materialization.
|
|
128
|
+
if (
|
|
129
|
+
source_table_context.object_type == ObjectType.VIEW
|
|
130
|
+
and self.context.source_platform == Platform.TERADATA
|
|
131
|
+
):
|
|
132
|
+
source_result = data_validation_api.normalize_table_metadata(
|
|
133
|
+
platform=self.context.source_platform,
|
|
134
|
+
metadata=source_result,
|
|
135
|
+
)
|
|
136
|
+
|
|
125
137
|
self._emit_extraction_message(target_table_context)
|
|
126
138
|
target_result = data_validation_api.execute_query(
|
|
127
139
|
table_context=target_table_context,
|
|
@@ -130,13 +142,25 @@ class SyncValidationExecutor(BaseValidationExecutor):
|
|
|
130
142
|
result_processor=self.target_extractor.process_schema_query_result,
|
|
131
143
|
)
|
|
132
144
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
145
|
+
if (
|
|
146
|
+
source_table_context.object_type == ObjectType.VIEW
|
|
147
|
+
and self.context.source_platform == Platform.TERADATA
|
|
148
|
+
):
|
|
149
|
+
validation_result = data_validation_api.validate_schema_simple(
|
|
150
|
+
source_query_result=source_result,
|
|
151
|
+
target_query_result=target_result,
|
|
152
|
+
table_context=source_table_context,
|
|
153
|
+
column_mappings=column_mappings,
|
|
154
|
+
datatypes_mappings=self.context.datatypes_mappings,
|
|
155
|
+
)
|
|
156
|
+
else:
|
|
157
|
+
validation_result = data_validation_api.validate_schema(
|
|
158
|
+
source_query_result=source_result,
|
|
159
|
+
target_query_result=target_result,
|
|
160
|
+
table_context=source_table_context,
|
|
161
|
+
column_mappings=column_mappings,
|
|
162
|
+
datatypes_mappings=self.context.datatypes_mappings,
|
|
163
|
+
)
|
|
140
164
|
|
|
141
165
|
self._emit_validation_result_message(
|
|
142
166
|
validation_type=ValidationLevel.SCHEMA_VALIDATION.value,
|
|
@@ -489,6 +489,35 @@ class SQLQueriesTemplateGenerator:
|
|
|
489
489
|
except Exception as e:
|
|
490
490
|
raise Exception(f"Error generating template: {e}") from e
|
|
491
491
|
|
|
492
|
+
def generate_cell_validation_data_select_query(
|
|
493
|
+
self,
|
|
494
|
+
platform: str,
|
|
495
|
+
column_collection: list,
|
|
496
|
+
datatypes_normalization_renderer_templates: dict[str, str],
|
|
497
|
+
fully_qualified_name: str,
|
|
498
|
+
has_where_clause: bool,
|
|
499
|
+
where_clause: str,
|
|
500
|
+
order_by_columns: list[str] | None,
|
|
501
|
+
) -> str:
|
|
502
|
+
"""Render a SELECT that applies the same per-type normalization as L3 MD5."""
|
|
503
|
+
template_file = f"{platform}_cell_validation_data_select.sql.j2"
|
|
504
|
+
try:
|
|
505
|
+
template = self.env.get_template(template_file)
|
|
506
|
+
return template.render(
|
|
507
|
+
column_collection=column_collection,
|
|
508
|
+
datatypes_normalization_renderer_templates=datatypes_normalization_renderer_templates,
|
|
509
|
+
fully_qualified_name=fully_qualified_name,
|
|
510
|
+
has_where_clause=has_where_clause,
|
|
511
|
+
where_clause=where_clause,
|
|
512
|
+
order_by_columns=order_by_columns or [],
|
|
513
|
+
)
|
|
514
|
+
except jinja2.exceptions.TemplateNotFound:
|
|
515
|
+
raise ValueError(
|
|
516
|
+
f"Template not found: {template_file}. Please create it in the {self.template_dir} directory."
|
|
517
|
+
) from None
|
|
518
|
+
except Exception as e:
|
|
519
|
+
raise Exception(f"Error generating template: {e}") from e
|
|
520
|
+
|
|
492
521
|
# SNOWFLAKE ONLY
|
|
493
522
|
def generate_chunk_row_md5_template_query(
|
|
494
523
|
self,
|
|
@@ -306,7 +306,11 @@ class ParallelExecutionEngine:
|
|
|
306
306
|
db_manager=db_manager,
|
|
307
307
|
)
|
|
308
308
|
|
|
309
|
-
|
|
309
|
+
is_view = table_configuration.object_type == ObjectType.VIEW
|
|
310
|
+
is_dialect_teradata = context.source_platform == Platform.TERADATA
|
|
311
|
+
|
|
312
|
+
# Materialize source view if needed (Teradata views don't require materialization)
|
|
313
|
+
if is_view and not is_dialect_teradata:
|
|
310
314
|
self.view_pre_processor.materialize_source_view(
|
|
311
315
|
view_configuration=table_configuration,
|
|
312
316
|
source_extractor=source_extractor,
|
|
@@ -378,10 +382,17 @@ class ParallelExecutionEngine:
|
|
|
378
382
|
db_manager=db_manager,
|
|
379
383
|
)
|
|
380
384
|
|
|
381
|
-
|
|
382
|
-
|
|
385
|
+
is_view = table_configuration.object_type == ObjectType.VIEW
|
|
386
|
+
is_dialect_teradata = context.source_platform == Platform.TERADATA
|
|
387
|
+
|
|
388
|
+
if is_view and not is_dialect_teradata:
|
|
389
|
+
self.view_pre_processor.materialize_source_view(
|
|
383
390
|
view_configuration=table_configuration,
|
|
384
391
|
source_extractor=source_extractor,
|
|
392
|
+
context=context,
|
|
393
|
+
)
|
|
394
|
+
self.view_pre_processor.materialize_target_view(
|
|
395
|
+
view_configuration=table_configuration,
|
|
385
396
|
target_extractor=target_extractor,
|
|
386
397
|
context=context,
|
|
387
398
|
)
|
|
@@ -177,6 +177,15 @@ class TableMetadataProcessor:
|
|
|
177
177
|
)
|
|
178
178
|
)
|
|
179
179
|
|
|
180
|
+
column_metadata_result = data_validation_api.normalize_table_column_metadata(
|
|
181
|
+
platform=context.source_platform,
|
|
182
|
+
database=table_configuration.source_database,
|
|
183
|
+
schema=table_configuration.source_schema,
|
|
184
|
+
table=table_configuration.source_table,
|
|
185
|
+
object_type=table_configuration.object_type,
|
|
186
|
+
metadata=column_metadata_result,
|
|
187
|
+
)
|
|
188
|
+
|
|
180
189
|
row_count_query = data_validation_api.generate_row_count_query(
|
|
181
190
|
fully_qualified_name=table_configuration.fully_qualified_name,
|
|
182
191
|
where_clause=table_configuration.where_clause,
|
|
@@ -28,32 +28,6 @@ class ViewPreProcessor:
|
|
|
28
28
|
queries to script files for later reference.
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
|
-
def create_temporary_table_from_view(
|
|
32
|
-
self,
|
|
33
|
-
view_configuration: ViewConfiguration,
|
|
34
|
-
source_extractor: MetadataExtractorBase | ScriptWriterBase,
|
|
35
|
-
target_extractor: MetadataExtractorBase | ScriptWriterBase,
|
|
36
|
-
context: Context,
|
|
37
|
-
) -> None:
|
|
38
|
-
"""Create temporary tables from views for both source and target platforms.
|
|
39
|
-
|
|
40
|
-
Uses the public workflow API to generate and execute view materialization
|
|
41
|
-
queries in a decoupled manner. For async mode, also writes the queries to
|
|
42
|
-
script files.
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
view_configuration: Configuration object containing view details and settings.
|
|
46
|
-
source_extractor: Extractor or script writer for the source platform.
|
|
47
|
-
target_extractor: Extractor or script writer for the target platform.
|
|
48
|
-
context: Context object containing platform and execution details.
|
|
49
|
-
|
|
50
|
-
Returns:
|
|
51
|
-
None
|
|
52
|
-
|
|
53
|
-
"""
|
|
54
|
-
self.materialize_source_view(view_configuration, source_extractor, context)
|
|
55
|
-
self.materialize_target_view(view_configuration, target_extractor, context)
|
|
56
|
-
|
|
57
31
|
def materialize_source_view(
|
|
58
32
|
self,
|
|
59
33
|
view_configuration: ViewConfiguration,
|
|
@@ -88,9 +88,21 @@ The cell validation provides a lightweight alternative to MD5-based row validati
|
|
|
88
88
|
|
|
89
89
|
| Function | Purpose |
|
|
90
90
|
|----------|---------|
|
|
91
|
-
| `
|
|
91
|
+
| `result_set_to_dataframe()` | Converts a `ResultSet` object to a Polars DataFrame |
|
|
92
|
+
| `result_set_cell_level_validation()` | Compares two `ResultSet` objects at the cell level and determines if they are equivalent |
|
|
93
|
+
| `result_set_metrics_level_validation()` | Compares two `ResultSet` objects at the metrics level (min, max, count, etc.) |
|
|
92
94
|
|
|
93
|
-
|
|
95
|
+
These functions compare result sets for equivalence. Cell-level validation checks individual cell values while metrics-level validation compares aggregate statistics.
|
|
96
|
+
|
|
97
|
+
### Step 3.2.2: Query Comparison
|
|
98
|
+
|
|
99
|
+
| Function | Purpose |
|
|
100
|
+
|----------|---------|
|
|
101
|
+
| `query_to_dataframe()` | Executes a query and converts the result to a Polars DataFrame |
|
|
102
|
+
| `query_cell_level_validation()` | Compares two Polars DataFrames at the cell level |
|
|
103
|
+
| `query_metrics_level_validation()` | Compares two Polars DataFrames at the metrics level with configurable tolerance |
|
|
104
|
+
|
|
105
|
+
These functions provide direct DataFrame comparison capabilities without requiring `ResultSet` objects. They are useful for comparing query results from different sources.
|
|
94
106
|
|
|
95
107
|
### Step 3.3: Snapshot Validation
|
|
96
108
|
|
|
@@ -48,6 +48,7 @@ from snowflake.snowflake_data_validation.public.data_validation_api import (
|
|
|
48
48
|
execute_view_materialization,
|
|
49
49
|
extract_row_count,
|
|
50
50
|
generate_case_sensitive_columns_query,
|
|
51
|
+
generate_cell_validation_data_query,
|
|
51
52
|
generate_column_metadata_query,
|
|
52
53
|
generate_compute_md5_queries,
|
|
53
54
|
generate_create_md5_table_statement,
|
|
@@ -63,8 +64,12 @@ from snowflake.snowflake_data_validation.public.data_validation_api import (
|
|
|
63
64
|
load_validation_results,
|
|
64
65
|
process_table_column_metadata,
|
|
65
66
|
process_target_table_column_metadata_from_source_table,
|
|
67
|
+
query_cell_level_validation,
|
|
68
|
+
query_metrics_level_validation,
|
|
69
|
+
query_to_dataframe,
|
|
66
70
|
result_set_cell_level_validation,
|
|
67
71
|
result_set_metrics_level_validation,
|
|
72
|
+
result_set_to_dataframe,
|
|
68
73
|
run_async_generation,
|
|
69
74
|
run_async_validation,
|
|
70
75
|
run_source_validation,
|
|
@@ -173,6 +178,7 @@ __all__ = [
|
|
|
173
178
|
"execute_view_materialization",
|
|
174
179
|
"extract_row_count",
|
|
175
180
|
"generate_case_sensitive_columns_query",
|
|
181
|
+
"generate_cell_validation_data_query",
|
|
176
182
|
"generate_column_metadata_query",
|
|
177
183
|
"generate_compute_md5_queries",
|
|
178
184
|
"generate_create_md5_table_statement",
|
|
@@ -188,8 +194,12 @@ __all__ = [
|
|
|
188
194
|
"load_validation_results",
|
|
189
195
|
"process_table_column_metadata",
|
|
190
196
|
"process_target_table_column_metadata_from_source_table",
|
|
197
|
+
"query_cell_level_validation",
|
|
198
|
+
"query_metrics_level_validation",
|
|
199
|
+
"query_to_dataframe",
|
|
191
200
|
"result_set_cell_level_validation",
|
|
192
201
|
"result_set_metrics_level_validation",
|
|
202
|
+
"result_set_to_dataframe",
|
|
193
203
|
"run_async_generation",
|
|
194
204
|
"run_async_validation",
|
|
195
205
|
"run_source_validation",
|
snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/public/_teradata_internal.py
ADDED
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
# Copyright 2026 Snowflake Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
"""Teradata-specific internal helper functions for the public API.
|
|
17
|
+
|
|
18
|
+
This module contains private utility functions that support the public API
|
|
19
|
+
for Teradata-specific operations, including normalization of HELP COLUMN results.
|
|
20
|
+
|
|
21
|
+
WARNING: Functions in this module are internal implementation details and
|
|
22
|
+
may change without notice. Do not import from this module directly.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
import pandas as pd
|
|
28
|
+
|
|
29
|
+
from snowflake.snowflake_data_validation.utils.constants import (
|
|
30
|
+
CALCULATED_COLUMN_SIZE_IN_BYTES_KEY,
|
|
31
|
+
CHARACTER_LENGTH_KEY,
|
|
32
|
+
COLUMN_NAME_KEY,
|
|
33
|
+
DATA_TYPE_KEY,
|
|
34
|
+
DATABASE_NAME_KEY,
|
|
35
|
+
IS_PRIMARY_KEY_KEY,
|
|
36
|
+
NULLABLE_KEY,
|
|
37
|
+
PRECISION_KEY,
|
|
38
|
+
SCALE_KEY,
|
|
39
|
+
SCHEMA_NAME_KEY,
|
|
40
|
+
TABLE_NAME_KEY,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
TERADATA_TYPE_CODE_MAPPING = {
|
|
45
|
+
"A1": "ARRAY",
|
|
46
|
+
"AN": "MULTI-DIMENSIONAL ARRAY",
|
|
47
|
+
"AT": "TIME",
|
|
48
|
+
"BF": "BYTE",
|
|
49
|
+
"BO": "BLOB",
|
|
50
|
+
"BV": "VARBYTE",
|
|
51
|
+
"CF": "CHAR",
|
|
52
|
+
"CO": "CLOB",
|
|
53
|
+
"CV": "VARCHAR",
|
|
54
|
+
"D": "DECIMAL",
|
|
55
|
+
"DA": "DATE",
|
|
56
|
+
"DH": "INTERVAL DAY TO HOUR",
|
|
57
|
+
"DM": "INTERVAL DAY TO MINUTE",
|
|
58
|
+
"DS": "INTERVAL DAY TO SECOND",
|
|
59
|
+
"DY": "INTERVAL DAY",
|
|
60
|
+
"F": "FLOAT",
|
|
61
|
+
"HM": "INTERVAL HOUR TO MINUTE",
|
|
62
|
+
"HS": "INTERVAL HOUR TO SECOND",
|
|
63
|
+
"HR": "INTERVAL HOUR",
|
|
64
|
+
"I": "INTEGER",
|
|
65
|
+
"I1": "BYTEINT",
|
|
66
|
+
"I2": "SMALLINT",
|
|
67
|
+
"I8": "BIGINT",
|
|
68
|
+
"JN": "JSON",
|
|
69
|
+
"MI": "INTERVAL MINUTE",
|
|
70
|
+
"MO": "INTERVAL MONTH",
|
|
71
|
+
"MS": "INTERVAL MINUTE TO SECOND",
|
|
72
|
+
"N": "NUMBER",
|
|
73
|
+
"PD": "PERIOD(DATE)",
|
|
74
|
+
"PM": "PERIOD(TIMESTAMP WITH TIME ZONE)",
|
|
75
|
+
"PS": "PERIOD(TIMESTAMP)",
|
|
76
|
+
"PT": "PERIOD(TIME)",
|
|
77
|
+
"PZ": "PERIOD(TIME WITH TIME ZONE)",
|
|
78
|
+
"SC": "INTERVAL SECOND",
|
|
79
|
+
"SZ": "TIMESTAMP WITH TIME ZONE",
|
|
80
|
+
"TS": "TIMESTAMP",
|
|
81
|
+
"TZ": "TIME WITH TIME ZONE",
|
|
82
|
+
"XM": "XML",
|
|
83
|
+
"YM": "INTERVAL YEAR TO MONTH",
|
|
84
|
+
"YR": "INTERVAL YEAR",
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
TERADATA_STRING_DATA_TYPES = {
|
|
88
|
+
"CHAR",
|
|
89
|
+
"VARCHAR",
|
|
90
|
+
"CLOB",
|
|
91
|
+
"BYTE",
|
|
92
|
+
"VARBYTE",
|
|
93
|
+
"INTERVAL DAY TO HOUR",
|
|
94
|
+
"INTERVAL DAY TO MINUTE",
|
|
95
|
+
"INTERVAL DAY TO SECOND",
|
|
96
|
+
"INTERVAL DAY",
|
|
97
|
+
"INTERVAL HOUR TO MINUTE",
|
|
98
|
+
"INTERVAL HOUR TO SECOND",
|
|
99
|
+
"INTERVAL HOUR",
|
|
100
|
+
"INTERVAL MINUTE",
|
|
101
|
+
"INTERVAL MINUTE TO SECOND",
|
|
102
|
+
"INTERVAL SECOND",
|
|
103
|
+
"INTERVAL YEAR TO MONTH",
|
|
104
|
+
"INTERVAL YEAR",
|
|
105
|
+
"INTERVAL MONTH",
|
|
106
|
+
"PERIOD(DATE)",
|
|
107
|
+
"PERIOD(TIME)",
|
|
108
|
+
"PERIOD(TIME WITH TIME ZONE)",
|
|
109
|
+
"PERIOD(TIMESTAMP)",
|
|
110
|
+
"PERIOD(TIMESTAMP WITH TIME ZONE)",
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
TERADATA_NUMERIC_DATA_TYPES = {
|
|
114
|
+
"DECIMAL",
|
|
115
|
+
"NUMBER",
|
|
116
|
+
"INTEGER",
|
|
117
|
+
"BYTEINT",
|
|
118
|
+
"SMALLINT",
|
|
119
|
+
"BIGINT",
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
TERADATA_HELP_COLUMN_NAME = "COLUMN NAME"
|
|
123
|
+
TERADATA_HELP_COLUMN_TYPE = "TYPE"
|
|
124
|
+
TERADATA_HELP_COLUMN_NULLABLE = "NULLABLE"
|
|
125
|
+
TERADATA_HELP_COLUMN_MAX_LENGTH = "MAX LENGTH"
|
|
126
|
+
TERADATA_HELP_COLUMN_DECIMAL_TOTAL = "DECIMAL TOTAL DIGITS"
|
|
127
|
+
TERADATA_HELP_COLUMN_DECIMAL_FRAC = "DECIMAL FRACTIONAL DIGITS"
|
|
128
|
+
|
|
129
|
+
COLUMN_VALIDATED_KEY = "COLUMN_VALIDATED"
|
|
130
|
+
TERADATA_HELP_COLUMN_PRIMARY = "PRIMARY?"
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def teradata_normalize_table_column_metadata(
|
|
134
|
+
database: str,
|
|
135
|
+
table: str,
|
|
136
|
+
metadata_df: pd.DataFrame,
|
|
137
|
+
) -> pd.DataFrame:
|
|
138
|
+
"""Normalize Teradata HELP COLUMN result into a standardized column metadata DataFrame.
|
|
139
|
+
|
|
140
|
+
This function transforms the output of Teradata's HELP COLUMN command into a
|
|
141
|
+
standardized DataFrame format used by the data validation framework.
|
|
142
|
+
Uses vectorized pandas operations for better performance.
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
database: The database name containing the table.
|
|
146
|
+
table: The table name.
|
|
147
|
+
metadata_df: DataFrame containing HELP COLUMN results with columns:
|
|
148
|
+
- Column Name: Name of the column
|
|
149
|
+
- Type: 2-character Teradata type code (e.g., 'CV', 'I', 'D')
|
|
150
|
+
- Nullable: Nullable indicator (Y/N/?/1/-)
|
|
151
|
+
- Max Length: Maximum length for character types
|
|
152
|
+
- Decimal Total Digits: Precision for numeric types
|
|
153
|
+
- Decimal Fractional Digits: Scale for numeric types
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
pd.DataFrame: Normalized DataFrame with columns:
|
|
157
|
+
DATABASE_NAME, SCHEMA_NAME, TABLE_NAME, COLUMN_NAME, DATA_TYPE,
|
|
158
|
+
CHARACTER_LENGTH, PRECISION, SCALE, NULLABLE, IS_PRIMARY_KEY,
|
|
159
|
+
CALCULATED_COLUMN_SIZE_IN_BYTES
|
|
160
|
+
|
|
161
|
+
"""
|
|
162
|
+
output_columns = [
|
|
163
|
+
DATABASE_NAME_KEY,
|
|
164
|
+
SCHEMA_NAME_KEY,
|
|
165
|
+
TABLE_NAME_KEY,
|
|
166
|
+
COLUMN_NAME_KEY,
|
|
167
|
+
DATA_TYPE_KEY,
|
|
168
|
+
CHARACTER_LENGTH_KEY,
|
|
169
|
+
PRECISION_KEY,
|
|
170
|
+
SCALE_KEY,
|
|
171
|
+
NULLABLE_KEY,
|
|
172
|
+
IS_PRIMARY_KEY_KEY,
|
|
173
|
+
CALCULATED_COLUMN_SIZE_IN_BYTES_KEY,
|
|
174
|
+
]
|
|
175
|
+
|
|
176
|
+
if metadata_df.empty:
|
|
177
|
+
return pd.DataFrame(columns=output_columns)
|
|
178
|
+
|
|
179
|
+
result_df = pd.DataFrame()
|
|
180
|
+
|
|
181
|
+
result_df[COLUMN_NAME_KEY] = (
|
|
182
|
+
metadata_df[TERADATA_HELP_COLUMN_NAME].fillna("").astype(str).str.strip()
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
type_codes = (
|
|
186
|
+
metadata_df[TERADATA_HELP_COLUMN_TYPE].fillna("").astype(str).str.strip()
|
|
187
|
+
)
|
|
188
|
+
result_df[DATA_TYPE_KEY] = type_codes.map(TERADATA_TYPE_CODE_MAPPING).fillna(
|
|
189
|
+
type_codes
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
is_string = result_df[DATA_TYPE_KEY].isin(TERADATA_STRING_DATA_TYPES)
|
|
193
|
+
is_numeric = result_df[DATA_TYPE_KEY].isin(TERADATA_NUMERIC_DATA_TYPES)
|
|
194
|
+
|
|
195
|
+
max_length = pd.to_numeric(
|
|
196
|
+
metadata_df[TERADATA_HELP_COLUMN_MAX_LENGTH], errors="coerce"
|
|
197
|
+
).fillna(0)
|
|
198
|
+
result_df[CHARACTER_LENGTH_KEY] = "0"
|
|
199
|
+
result_df.loc[is_string, CHARACTER_LENGTH_KEY] = (
|
|
200
|
+
max_length[is_string].astype(int).astype(str)
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
decimal_total = pd.to_numeric(
|
|
204
|
+
metadata_df[TERADATA_HELP_COLUMN_DECIMAL_TOTAL], errors="coerce"
|
|
205
|
+
).fillna(-128)
|
|
206
|
+
decimal_frac = pd.to_numeric(
|
|
207
|
+
metadata_df[TERADATA_HELP_COLUMN_DECIMAL_FRAC], errors="coerce"
|
|
208
|
+
).fillna(-128)
|
|
209
|
+
|
|
210
|
+
result_df[PRECISION_KEY] = "-1"
|
|
211
|
+
valid_precision = is_numeric & (decimal_total != -128)
|
|
212
|
+
result_df.loc[valid_precision, PRECISION_KEY] = (
|
|
213
|
+
decimal_total[valid_precision].astype(int).astype(str)
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
result_df[SCALE_KEY] = "-1"
|
|
217
|
+
valid_scale = is_numeric & (decimal_frac != -128)
|
|
218
|
+
result_df.loc[valid_scale, SCALE_KEY] = (
|
|
219
|
+
decimal_frac[valid_scale].astype(int).astype(str)
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
nullable_values = (
|
|
223
|
+
metadata_df[TERADATA_HELP_COLUMN_NULLABLE]
|
|
224
|
+
.fillna("")
|
|
225
|
+
.astype(str)
|
|
226
|
+
.str.strip()
|
|
227
|
+
.str.upper()
|
|
228
|
+
)
|
|
229
|
+
result_df[NULLABLE_KEY] = nullable_values == "Y"
|
|
230
|
+
|
|
231
|
+
primary_values = (
|
|
232
|
+
metadata_df[TERADATA_HELP_COLUMN_PRIMARY]
|
|
233
|
+
.fillna("")
|
|
234
|
+
.astype(str)
|
|
235
|
+
.str.strip()
|
|
236
|
+
.str.upper()
|
|
237
|
+
)
|
|
238
|
+
result_df[IS_PRIMARY_KEY_KEY] = primary_values == "Y"
|
|
239
|
+
|
|
240
|
+
result_df[CALCULATED_COLUMN_SIZE_IN_BYTES_KEY] = "0"
|
|
241
|
+
result_df.loc[is_string, CALCULATED_COLUMN_SIZE_IN_BYTES_KEY] = (
|
|
242
|
+
max_length[is_string].astype(int).astype(str)
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
result_df[DATABASE_NAME_KEY] = database
|
|
246
|
+
result_df[SCHEMA_NAME_KEY] = database
|
|
247
|
+
result_df[TABLE_NAME_KEY] = table
|
|
248
|
+
|
|
249
|
+
return result_df[output_columns]
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def teradata_normalize_table_metadata(
|
|
253
|
+
metadata_df: pd.DataFrame,
|
|
254
|
+
) -> pd.DataFrame:
|
|
255
|
+
"""Normalize Teradata HELP COLUMN result into minimal table metadata format.
|
|
256
|
+
|
|
257
|
+
This function transforms the output of Teradata's HELP COLUMN command into a
|
|
258
|
+
minimal DataFrame format used for simple schema validation.
|
|
259
|
+
Uses vectorized pandas operations for better performance.
|
|
260
|
+
|
|
261
|
+
Args:
|
|
262
|
+
metadata_df: DataFrame containing HELP COLUMN results.
|
|
263
|
+
|
|
264
|
+
Returns:
|
|
265
|
+
pd.DataFrame: Normalized DataFrame with columns:
|
|
266
|
+
COLUMN_VALIDATED, DATA_TYPE
|
|
267
|
+
|
|
268
|
+
"""
|
|
269
|
+
output_columns = [COLUMN_VALIDATED_KEY, DATA_TYPE_KEY]
|
|
270
|
+
|
|
271
|
+
if metadata_df.empty:
|
|
272
|
+
return pd.DataFrame(columns=output_columns)
|
|
273
|
+
|
|
274
|
+
result_df = pd.DataFrame()
|
|
275
|
+
|
|
276
|
+
result_df[COLUMN_VALIDATED_KEY] = (
|
|
277
|
+
metadata_df[TERADATA_HELP_COLUMN_NAME].fillna("").astype(str).str.strip()
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
type_codes = (
|
|
281
|
+
metadata_df[TERADATA_HELP_COLUMN_TYPE].fillna("").astype(str).str.strip()
|
|
282
|
+
)
|
|
283
|
+
result_df[DATA_TYPE_KEY] = type_codes.map(TERADATA_TYPE_CODE_MAPPING).fillna(
|
|
284
|
+
type_codes
|
|
285
|
+
)
|
|
286
|
+
|
|
287
|
+
return result_df[output_columns]
|