snowflake-data-validation 1.9.0__tar.gz → 1.9.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/.gitignore +3 -3
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/PKG-INFO +25 -2
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/README.md +24 -1
- snowflake_data_validation-1.9.2/docs/README.md +44 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/__version__.py +1 -1
- snowflake_data_validation-1.9.2/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +87 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +5 -1
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +6 -6
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +3 -0
- snowflake_data_validation-1.9.2/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +23 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +3 -3
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +1 -1
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +5 -5
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +3 -3
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +31 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/constants.py +6 -2
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_column_grouping.py +24 -0
- snowflake_data_validation-1.9.0/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -73
- snowflake_data_validation-1.9.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +0 -13
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/LICENSE +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/pyproject.toml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/common_cli/cli_sync_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/postgresql_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/cli/test_redshift_cli_generate_validation_scripts.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/cli/test_redshift_cli_get_configuration_files.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/cli/test_redshift_cli_run_async_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/cli/test_redshift_cli_run_validation_ipc.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/Teradata/test_teradata_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/oracle/test_oracle_query_generator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_batched_metrics_queries.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_cell_validation_query_generation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_console_progress_reporter.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_data_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_snowflake_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_sqlserver_cli.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.9.0 → snowflake_data_validation-1.9.2}/tests/unit/utils/test_constants.py +0 -0
|
@@ -14,9 +14,9 @@ __pycache__/
|
|
|
14
14
|
# C extensions
|
|
15
15
|
*.so
|
|
16
16
|
|
|
17
|
-
# Sphinx documentation
|
|
18
|
-
docs/build/
|
|
19
|
-
docs/source/**/_autosummary
|
|
17
|
+
# Sphinx documentation (snowflake-data-validation package)
|
|
18
|
+
snowflake-data-validation/docs/build/
|
|
19
|
+
snowflake-data-validation/docs/source/**/_autosummary
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
# Distribution / packaging
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.2
|
|
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/
|
|
@@ -88,7 +88,7 @@ Description-Content-Type: text/markdown
|
|
|
88
88
|
|
|
89
89
|
**Snowflake Data Validation** is a command-line tool and Python library for validating data migrations and ensuring data quality between source and target databases, with support for SQL Server, Redshift, Teradata, and Oracle as source systems.
|
|
90
90
|
|
|
91
|
-
> 📖 **For detailed usage instructions, configuration examples, and CLI reference,
|
|
91
|
+
> 📖 **For detailed usage instructions, configuration examples, and CLI reference, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).**
|
|
92
92
|
|
|
93
93
|
---
|
|
94
94
|
|
|
@@ -186,6 +186,17 @@ Performs row-by-row comparison:
|
|
|
186
186
|
|
|
187
187
|
---
|
|
188
188
|
|
|
189
|
+
## CLI commands
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
snowflake-data-validation <source_dialect> <command> [options]
|
|
193
|
+
# Short alias: sdv <source_dialect> <command> [options]
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Supported dialects include `sqlserver`, `teradata`, `redshift`, and `oracle`. Common commands: `run-validation`, `run-async-validation`, `source-validate`, and `generate-validation-scripts`. The dialect must match `source_platform` in your configuration file.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
189
200
|
## 📚 Documentation
|
|
190
201
|
|
|
191
202
|
For complete command reference, configuration options, and examples, see the [Data Validation CLI](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
|
|
@@ -194,6 +205,18 @@ For complete command reference, configuration options, and examples, see the [Da
|
|
|
194
205
|
|
|
195
206
|
## Changelog
|
|
196
207
|
|
|
208
|
+
### v1.9.2
|
|
209
|
+
|
|
210
|
+
**Bug fixes**
|
|
211
|
+
|
|
212
|
+
- Fixed L3 row hashing crash when source and target tables had different column counts under existing column-selection or column-mapping config.
|
|
213
|
+
|
|
214
|
+
### v1.9.1
|
|
215
|
+
|
|
216
|
+
**Bug fixes**
|
|
217
|
+
|
|
218
|
+
- Fixed smart partition size calculation when using `targetWhereClause`.
|
|
219
|
+
|
|
197
220
|
### v1.9.0
|
|
198
221
|
|
|
199
222
|
**New features**
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
**Snowflake Data Validation** is a command-line tool and Python library for validating data migrations and ensuring data quality between source and target databases, with support for SQL Server, Redshift, Teradata, and Oracle as source systems.
|
|
7
7
|
|
|
8
|
-
> 📖 **For detailed usage instructions, configuration examples, and CLI reference,
|
|
8
|
+
> 📖 **For detailed usage instructions, configuration examples, and CLI reference, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).**
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -103,6 +103,17 @@ Performs row-by-row comparison:
|
|
|
103
103
|
|
|
104
104
|
---
|
|
105
105
|
|
|
106
|
+
## CLI commands
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
snowflake-data-validation <source_dialect> <command> [options]
|
|
110
|
+
# Short alias: sdv <source_dialect> <command> [options]
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Supported dialects include `sqlserver`, `teradata`, `redshift`, and `oracle`. Common commands: `run-validation`, `run-async-validation`, `source-validate`, and `generate-validation-scripts`. The dialect must match `source_platform` in your configuration file.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
106
117
|
## 📚 Documentation
|
|
107
118
|
|
|
108
119
|
For complete command reference, configuration options, and examples, see the [Data Validation CLI](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
|
|
@@ -111,6 +122,18 @@ For complete command reference, configuration options, and examples, see the [Da
|
|
|
111
122
|
|
|
112
123
|
## Changelog
|
|
113
124
|
|
|
125
|
+
### v1.9.2
|
|
126
|
+
|
|
127
|
+
**Bug fixes**
|
|
128
|
+
|
|
129
|
+
- Fixed L3 row hashing crash when source and target tables had different column counts under existing column-selection or column-mapping config.
|
|
130
|
+
|
|
131
|
+
### v1.9.1
|
|
132
|
+
|
|
133
|
+
**Bug fixes**
|
|
134
|
+
|
|
135
|
+
- Fixed smart partition size calculation when using `targetWhereClause`.
|
|
136
|
+
|
|
114
137
|
### v1.9.0
|
|
115
138
|
|
|
116
139
|
**New features**
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Data Validations API Documentation
|
|
2
|
+
|
|
3
|
+
## How to build the API Reference documentation
|
|
4
|
+
|
|
5
|
+
1. Create a Python virtual environment if you don't have one already and activate it:
|
|
6
|
+
|
|
7
|
+
```shell
|
|
8
|
+
python3 -m venv .venv
|
|
9
|
+
source .venv/bin/activate
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
2. Install the required dependencies:
|
|
13
|
+
|
|
14
|
+
```shell
|
|
15
|
+
pip install hatch
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
3. Build the documentation from the root of the repository using `hatch`:
|
|
19
|
+
|
|
20
|
+
If you are not in the root of the repository, navigate to it first:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
cd $(git rev-parse --show-toplevel)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Then, run the following command to build the documentation:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
hatch run docs:build
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Alternatively, to build the documentation with a custom theme for testing purposes, you can run the following command:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
hatch run docs:build_pretty
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
4. Open the file `snowflake-data-validation/docs/build/html/index.html` in a web browser.
|
|
39
|
+
|
|
40
|
+
## Important files and directories
|
|
41
|
+
|
|
42
|
+
* `snowflake-data-validation/docs/source/index.rst`: Specify which `.rst` to include in the `index.html` landing page.
|
|
43
|
+
* `snowflake-data-validation/docs/source/conf.py`: The configuration parameters for Sphinx and autosummary.
|
|
44
|
+
* `snowflake-data-validation/docs/source/_templates/`: Directory containing JINJA templates used by autosummary.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# PostgreSQL normalization expressions for row/cell validation (canonical text).
|
|
2
|
+
# POINT maps to Snowflake GEOMETRY — emit OGC WKT (space-separated coords) to
|
|
3
|
+
# align with ST_ASWKT on the Snowflake side. Native point uses subscripts;
|
|
4
|
+
# PostGIS geometry/geography use ST_AsText when present.
|
|
5
|
+
# CAST(... AS ...) is used instead of :: casts so YAML parses unambiguously.
|
|
6
|
+
# BOOLEAN / BOOL: emit lowercase true/false to match Snowflake TO_CHAR(boolean).
|
|
7
|
+
# NUMERIC / DECIMAL / approximate floats: align canonical text with Snowflake ``TO_CHAR`` on the
|
|
8
|
+
# mirror (Snowflake normalization templates unchanged here — Postgres adjusts to match).
|
|
9
|
+
# DECIMAL / NUMERIC columns round-trip through NUMERIC(38, 12) before TO_CHAR so Postgres output
|
|
10
|
+
# matches Snowflake typed ``NUMBER(p,s)`` mirrors more closely (untyped ``CAST(... AS NUMERIC)``
|
|
11
|
+
# diverged around literal ``0`` / ``0.0`` payloads). Float approximate types use NUMERIC(38, 12) after
|
|
12
|
+
# IEEE ``±0`` canonicalization.
|
|
13
|
+
# Shared ``TO_CHAR(..., 'FM999...9999.0000')`` trims insignificant fractional zeros (FM).
|
|
14
|
+
# ``float8`` can carry IEEE ``-0`` — map ``±0`` to ``+0::double precision`` /
|
|
15
|
+
# ``+0::real`` with ``IS NOT DISTINCT FROM`` (``NaN`` stays distinct from zero).
|
|
16
|
+
# FM ``TO_CHAR`` can omit the digit before ``.`` (``.0000``). ``REGEXP_REPLACE(..., '^\\.', '0.')``
|
|
17
|
+
# aligns that with Snowflake-ish ``0….`` strings. Exact numeric zeros (all types after the shared
|
|
18
|
+
# ``numeric(38,12)`` / ``NUMBER(38,12)`` cast) normalize to literal ``0.0000`` so Snowflake ``FLOAT`` /
|
|
19
|
+
# ``NUMBER`` payloads that stringify as bare ``0`` still match Postgres row-hash concat.
|
|
20
|
+
# Datatype keys below are sorted lexicographically.
|
|
21
|
+
|
|
22
|
+
ARRAY: CAST("{{ col_name }}" AS TEXT)
|
|
23
|
+
BIGINT: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
24
|
+
BIGSERIAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
25
|
+
BIT: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
26
|
+
BIT VARYING: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
27
|
+
BOOL: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'true' WHEN "{{ col_name }}" IS FALSE THEN 'false' END)
|
|
28
|
+
BOOLEAN: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'true' WHEN "{{ col_name }}" IS FALSE THEN 'false' END)
|
|
29
|
+
BOX: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
30
|
+
BPCHAR: TRIM("{{ col_name }}")
|
|
31
|
+
# BYTEA: hex must match Snowflake BINARY canonicalization (TO_HEX-style uppercase).
|
|
32
|
+
BYTEA: UPPER(ENCODE("{{ col_name }}", 'hex'))
|
|
33
|
+
CHAR: TRIM("{{ col_name }}")
|
|
34
|
+
CHARACTER: TRIM("{{ col_name }}")
|
|
35
|
+
CHARACTER VARYING: TRIM("{{ col_name }}")
|
|
36
|
+
CIDR: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
37
|
+
CIRCLE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
38
|
+
DATE: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD')
|
|
39
|
+
DATERANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
40
|
+
DECIMAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
41
|
+
DEFAULT: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
42
|
+
DOMAIN: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
43
|
+
DOUBLE PRECISION: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN CAST("{{ col_name }}" AS DOUBLE PRECISION) IS NOT DISTINCT FROM 0::DOUBLE PRECISION THEN 0::DOUBLE PRECISION ELSE CAST("{{ col_name }}" AS DOUBLE PRECISION) END AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN CAST("{{ col_name }}" AS DOUBLE PRECISION) IS NOT DISTINCT FROM 0::DOUBLE PRECISION THEN 0::DOUBLE PRECISION ELSE CAST("{{ col_name }}" AS DOUBLE PRECISION) END AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
44
|
+
ENUM: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
45
|
+
FLOAT: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN CAST("{{ col_name }}" AS DOUBLE PRECISION) IS NOT DISTINCT FROM 0::DOUBLE PRECISION THEN 0::DOUBLE PRECISION ELSE CAST("{{ col_name }}" AS DOUBLE PRECISION) END AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN CAST("{{ col_name }}" AS DOUBLE PRECISION) IS NOT DISTINCT FROM 0::DOUBLE PRECISION THEN 0::DOUBLE PRECISION ELSE CAST("{{ col_name }}" AS DOUBLE PRECISION) END AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
46
|
+
GEOGRAPHY: TRIM(ST_AsText("{{ col_name }}"))
|
|
47
|
+
GEOMETRY: TRIM(ST_AsText("{{ col_name }}"))
|
|
48
|
+
INET: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
49
|
+
INT4RANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
50
|
+
INT8RANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
51
|
+
INTEGER: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
52
|
+
INTERVAL: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
53
|
+
JSON: CAST("{{ col_name }}" AS TEXT)
|
|
54
|
+
JSONB: CAST("{{ col_name }}" AS TEXT)
|
|
55
|
+
LINE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
56
|
+
LSEG: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
57
|
+
MACADDR: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
58
|
+
MACADDR8: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
59
|
+
MONEY: TRIM(CAST(CAST("{{ col_name }}" AS NUMERIC) AS TEXT))
|
|
60
|
+
NAME: TRIM("{{ col_name }}")
|
|
61
|
+
NUMERIC: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
62
|
+
NUMRANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
63
|
+
OID: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
64
|
+
PATH: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
65
|
+
POINT: TRIM(FORMAT('POINT(%s %s)', ("{{ col_name }}")[0], ("{{ col_name }}")[1]))
|
|
66
|
+
POLYGON: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
67
|
+
REAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CAST(CASE WHEN CAST("{{ col_name }}" AS REAL) IS NOT DISTINCT FROM 0::REAL THEN 0::REAL ELSE CAST("{{ col_name }}" AS REAL) END AS DOUBLE PRECISION) AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CAST(CASE WHEN CAST("{{ col_name }}" AS REAL) IS NOT DISTINCT FROM 0::REAL THEN 0::REAL ELSE CAST("{{ col_name }}" AS REAL) END AS DOUBLE PRECISION) AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
68
|
+
SERIAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
69
|
+
SMALLINT: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
70
|
+
SMALLSERIAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
71
|
+
TEXT: TRIM("{{ col_name }}")
|
|
72
|
+
TIME: TO_CHAR("{{ col_name }}", 'HH24:MI:SS')
|
|
73
|
+
TIME WITH TIME ZONE: TO_CHAR(CAST("{{ col_name }}" AT TIME ZONE 'UTC' AS time), 'HH24:MI:SS')
|
|
74
|
+
TIME WITHOUT TIME ZONE: TO_CHAR("{{ col_name }}", 'HH24:MI:SS')
|
|
75
|
+
TIMESTAMP: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD-HH24:MI:SS')
|
|
76
|
+
TIMESTAMP WITH TIME ZONE: TO_CHAR("{{ col_name }}" AT TIME ZONE 'UTC', 'YYYY-MM-DD-HH24:MI:SS')
|
|
77
|
+
TIMESTAMP WITHOUT TIME ZONE: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD-HH24:MI:SS')
|
|
78
|
+
TIMESTAMPTZ: TO_CHAR("{{ col_name }}" AT TIME ZONE 'UTC', 'YYYY-MM-DD-HH24:MI:SS')
|
|
79
|
+
TIMETZ: TO_CHAR(CAST("{{ col_name }}" AT TIME ZONE 'UTC' AS time), 'HH24:MI:SS')
|
|
80
|
+
TSQUERY: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
81
|
+
TSRANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
82
|
+
TSTZRANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
83
|
+
TSVECTOR: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
84
|
+
UUID: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
85
|
+
VARBIT: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
86
|
+
VARCHAR: TRIM("{{ col_name }}")
|
|
87
|
+
XML: CAST("{{ col_name }}" AS TEXT)
|
|
@@ -7,7 +7,11 @@ SELECT
|
|
|
7
7
|
UPPER(c.data_type) AS data_type,
|
|
8
8
|
CASE WHEN tc.constraint_type = 'PRIMARY KEY' THEN 1 ELSE 0 END AS is_primary_key,
|
|
9
9
|
COALESCE(c.character_maximum_length, -1) AS character_length,
|
|
10
|
-
|
|
10
|
+
CASE
|
|
11
|
+
WHEN c.data_type IN ('real', 'double precision', 'float4', 'float8') THEN -1
|
|
12
|
+
WHEN c.data_type IN ('smallint', 'integer', 'bigint') THEN 38
|
|
13
|
+
ELSE c.numeric_precision
|
|
14
|
+
END AS precision,
|
|
11
15
|
c.numeric_scale AS scale,
|
|
12
16
|
-1 AS calculated_column_size_in_bytes
|
|
13
17
|
FROM information_schema.columns c
|
|
@@ -6,19 +6,19 @@ SELECT
|
|
|
6
6
|
{% if use_column_groups %}
|
|
7
7
|
{% for group in column_groups %}
|
|
8
8
|
{% if not loop.first %} || {% endif %}
|
|
9
|
-
UPPER(MD5(TRIM(
|
|
9
|
+
UPPER(MD5(TRIM(CONCAT(
|
|
10
10
|
{% for col in group %}
|
|
11
11
|
CAST("{{ col.name }}" AS TEXT)
|
|
12
|
-
{% if not loop.last %}
|
|
12
|
+
{% if not loop.last %}, {% endif %}
|
|
13
13
|
{% endfor %}
|
|
14
|
-
)))
|
|
14
|
+
))))
|
|
15
15
|
{% endfor %}
|
|
16
16
|
{% else %}
|
|
17
|
-
TRIM(
|
|
17
|
+
TRIM(CONCAT(
|
|
18
18
|
{% for column in column_collection %}
|
|
19
19
|
CAST("{{ column.name }}" AS TEXT)
|
|
20
|
-
{% if not loop.last %}
|
|
21
|
-
{% endfor %})
|
|
20
|
+
{% if not loop.last %}, {% endif %}
|
|
21
|
+
{% endfor %}))
|
|
22
22
|
{% endif %}
|
|
23
23
|
)) AS ROW_MD5
|
|
24
24
|
FROM
|
|
@@ -13,6 +13,9 @@ SELECT
|
|
|
13
13
|
END AS CHARACTER_MAXIMUM_LENGTH,
|
|
14
14
|
CASE
|
|
15
15
|
WHEN c.data_type IN ('real', 'double precision', 'float4', 'float8') THEN -1
|
|
16
|
+
-- Integral Postgres types expose bit-width precision (e.g. BIGINT=64); mirror as
|
|
17
|
+
-- NUMBER(38,0) semantics so Snowflake schema comparison matches.
|
|
18
|
+
WHEN c.data_type IN ('smallint', 'integer', 'bigint') THEN 38
|
|
16
19
|
ELSE c.numeric_precision
|
|
17
20
|
END AS NUMERIC_PRECISION,
|
|
18
21
|
c.numeric_scale AS NUMERIC_SCALE,
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
BOOLEAN: TO_CHAR("{{ col_name }}")
|
|
2
|
+
DATE: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD')
|
|
3
|
+
# IEEE floats: ±0 coercion, CAST to NUMBER(38,12), FM TO_CHAR, leading "." fix, and exact-zero → "0.0000"
|
|
4
|
+
# (parity with Postgres row-hash text and bare "0" / ".0000" Snowflake quirks).
|
|
5
|
+
FLOAT: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
6
|
+
DOUBLE: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
7
|
+
DOUBLE PRECISION: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
8
|
+
FLOAT4: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
9
|
+
FLOAT8: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
10
|
+
REAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN ABS("{{ col_name }}") = 0 THEN 0 ELSE "{{ col_name }}" END AS NUMBER(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
11
|
+
# Fixed-point NUMBER
|
|
12
|
+
NUMBER: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMBER(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMBER(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
13
|
+
DECIMAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMBER(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMBER(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
14
|
+
NUMERIC: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMBER(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMBER(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
|
|
15
|
+
TIME: TO_CHAR("{{ col_name }}", 'HH24:MI:SS')
|
|
16
|
+
TIMESTAMP_LTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD-HH24:MI:SS')
|
|
17
|
+
TIMESTAMP_NTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD-HH24:MI:SS')
|
|
18
|
+
TIMESTAMP_TZ: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD-HH24:MI:SS')
|
|
19
|
+
VARCHAR: TRIM("{{ col_name }}")
|
|
20
|
+
GEOMETRY: TRIM(ST_ASWKT("{{ col_name }}"))
|
|
21
|
+
GEOGRAPHY: TRIM(ST_ASWKT("{{ col_name }}"))
|
|
22
|
+
|
|
23
|
+
DEFAULT: TO_VARCHAR("{{ col_name }}")
|
|
@@ -19,7 +19,7 @@ SELECT
|
|
|
19
19
|
{% endfor %}
|
|
20
20
|
))) AS CHAR(32))
|
|
21
21
|
{% endfor %}
|
|
22
|
-
AS VARCHAR(
|
|
22
|
+
AS VARCHAR(32000))
|
|
23
23
|
{% elif column_collection|length > 1 %}
|
|
24
24
|
CAST(TRIM(
|
|
25
25
|
{% for column in column_collection %}
|
|
@@ -30,9 +30,9 @@ SELECT
|
|
|
30
30
|
{% endif %}
|
|
31
31
|
{% if not loop.last %} || {% endif %}
|
|
32
32
|
{% endfor %}
|
|
33
|
-
) AS VARCHAR(
|
|
33
|
+
) AS VARCHAR(32000))
|
|
34
34
|
{% else %}
|
|
35
|
-
CAST(TRIM({{ column_names_separate_by_comma }}) AS VARCHAR(
|
|
35
|
+
CAST(TRIM({{ column_names_separate_by_comma }}) AS VARCHAR(32000))
|
|
36
36
|
{% endif %}
|
|
37
37
|
FROM
|
|
38
38
|
(SELECT
|
|
@@ -2,5 +2,5 @@ CREATE VOLATILE TABLE "ROW_CONCATENATED_{{ chunk_id }}_{{ table_id }}" (
|
|
|
2
2
|
{% for index_column in index_column_collection %}
|
|
3
3
|
"{{ index_column.name }}_IDX" {{ index_column.data_type }},
|
|
4
4
|
{% endfor %}
|
|
5
|
-
ROW_CONCAT_VALUES VARCHAR(
|
|
5
|
+
ROW_CONCAT_VALUES VARCHAR(32000)
|
|
6
6
|
) ON COMMIT PRESERVE ROWS;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
ARRAY: CAST("{{ col_name }}" AS VARCHAR(
|
|
1
|
+
ARRAY: CAST("{{ col_name }}" AS VARCHAR(32000))
|
|
2
2
|
BIGINT: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
3
3
|
BLOB: "{{ col_name }}"
|
|
4
|
-
BYTE: TRIM(CAST("{{ col_name }}" AS VARCHAR(
|
|
4
|
+
BYTE: TRIM(CAST("{{ col_name }}" AS VARCHAR(32000)))
|
|
5
5
|
BYTEINT: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
6
6
|
CHAR: TRIM("{{ col_name }}")
|
|
7
7
|
CLOB: TRIM("{{ col_name }}")
|
|
8
|
-
DATASET: CAST("{{ col_name }}".toJSON() AS VARCHAR(
|
|
8
|
+
DATASET: CAST("{{ col_name }}".toJSON() AS VARCHAR(32000))
|
|
9
9
|
DATE: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD')
|
|
10
10
|
DECIMAL: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
11
11
|
DEFAULT: TRIM(CAST("{{ col_name }}" AS VARCHAR(1000)))
|
|
12
12
|
DOUBLE PRECISION: TRIM(TO_CHAR(CAST("{{ col_name }}" AS DECIMAL(28,4)), '99999999999990.0000'))
|
|
13
13
|
FLOAT: TRIM(TO_CHAR(CAST("{{ col_name }}" AS DECIMAL(28,4)), '99999999999990.0000'))
|
|
14
|
-
GRAPHIC: CAST("{{ col_name }}" AS VARCHAR(
|
|
14
|
+
GRAPHIC: CAST("{{ col_name }}" AS VARCHAR(32000))
|
|
15
15
|
INTEGER: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
16
16
|
INTERVAL DAY: TRIM(CAST("{{ col_name }}" AS VARCHAR(5)))
|
|
17
17
|
INTERVAL DAY TO HOUR: TRIM(CAST("{{ col_name }}" AS VARCHAR(10)))
|
|
@@ -43,7 +43,7 @@ TIME WITH TIME ZONE: TO_CHAR("{{ col_name }}" AT TIME ZONE 'GMT', 'HH24:MI:SS')
|
|
|
43
43
|
TIMESTAMP: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD-HH24:MI:SS')
|
|
44
44
|
TIMESTAMP WITH TIME ZONE: TO_CHAR("{{ col_name }}" AT TIME ZONE 'GMT', 'YYYY-MM-DD-HH24:MI:SS')
|
|
45
45
|
VARARRAY: ARRAY_TO_STRING("{{ col_name }}", ', ')
|
|
46
|
-
VARBYTE: TRIM(CAST("{{ col_name }}" AS VARCHAR(
|
|
46
|
+
VARBYTE: TRIM(CAST("{{ col_name }}" AS VARCHAR(32000)))
|
|
47
47
|
VARCHAR: TRIM("{{ col_name }}")
|
|
48
48
|
VARGRAPHIC: CAST("{{ col_name }}" AS CLOB)
|
|
49
49
|
XML: CAST("{{ col_name }}" AS CLOB)
|
|
@@ -18,7 +18,7 @@ SELECT
|
|
|
18
18
|
{% endfor %}
|
|
19
19
|
))) AS VARCHAR(32))
|
|
20
20
|
{% endfor %}
|
|
21
|
-
AS VARCHAR(
|
|
21
|
+
AS VARCHAR(32000))
|
|
22
22
|
{% elif column_collection|length > 1 %}
|
|
23
23
|
CAST(TRIM(
|
|
24
24
|
{% for column in column_collection %}
|
|
@@ -29,9 +29,9 @@ SELECT
|
|
|
29
29
|
{% endif %}
|
|
30
30
|
{% if not loop.last %} || {% endif %}
|
|
31
31
|
{% endfor %}
|
|
32
|
-
) AS VARCHAR(
|
|
32
|
+
) AS VARCHAR(32000))
|
|
33
33
|
{% else %}
|
|
34
|
-
CAST(TRIM({{ column_names_separate_by_comma }}) AS VARCHAR(
|
|
34
|
+
CAST(TRIM({{ column_names_separate_by_comma }}) AS VARCHAR(32000))
|
|
35
35
|
{% endif %}
|
|
36
36
|
))) AS VARCHAR(32)) AS ROW_MD5
|
|
37
37
|
FROM
|
|
@@ -217,3 +217,34 @@ def compute_unified_column_groups(
|
|
|
217
217
|
return None
|
|
218
218
|
|
|
219
219
|
return src_groups, tgt_groups
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def compute_teradata_row_md5_column_groups(
|
|
223
|
+
source_columns: list[ColumnMetadata],
|
|
224
|
+
target_columns: list[ColumnMetadata],
|
|
225
|
+
) -> tuple[list[list[ColumnMetadata]], list[list[ColumnMetadata]]] | None:
|
|
226
|
+
"""Force one validated column per ``HASH_MD5`` segment on Teradata row-hash SQL.
|
|
227
|
+
|
|
228
|
+
Multi-column ``TRIM(a || b || ...)`` nested inside ``HASH_MD5`` can raise
|
|
229
|
+
Teradata **3798** (*column or character expression is larger than the max size*)
|
|
230
|
+
because the engine widens concatenation results before narrower ``CAST`` bounds
|
|
231
|
+
apply. Segmenting MD5 so each non-key column is hashed alone (then concatenating
|
|
232
|
+
fixed-length hex fragments) matches the stable semantics of grouped hashing while
|
|
233
|
+
avoiding that evaluation order.
|
|
234
|
+
|
|
235
|
+
Returns parallel ``(source_groups, target_groups)``, or ``None`` when no
|
|
236
|
+
segmentation applies (fewer than two validated columns).
|
|
237
|
+
|
|
238
|
+
Raises:
|
|
239
|
+
ValueError: If source/target column lists are not aligned.
|
|
240
|
+
|
|
241
|
+
"""
|
|
242
|
+
if len(source_columns) <= 1:
|
|
243
|
+
return None
|
|
244
|
+
if len(source_columns) != len(target_columns):
|
|
245
|
+
raise ValueError(
|
|
246
|
+
"compute_teradata_row_md5_column_groups requires aligned column lists "
|
|
247
|
+
f"of equal length, got source={len(source_columns)} vs "
|
|
248
|
+
f"target={len(target_columns)}"
|
|
249
|
+
)
|
|
250
|
+
return ([[c] for c in source_columns], [[c] for c in target_columns])
|
|
@@ -266,8 +266,12 @@ TABLE_NOT_FOUND_ERROR_CODE_SQL_SERVER = "42S02"
|
|
|
266
266
|
# columns into groups when the estimated concatenated string would exceed
|
|
267
267
|
# the engine. See the documentation URL in the comment above each entry.
|
|
268
268
|
MAX_CONCAT_LENGTH: dict[Platform, int] = {
|
|
269
|
-
# VARCHAR(n)
|
|
270
|
-
|
|
269
|
+
# ~64K is roughly the largest VARCHAR(n) Teradata lets you declare; it is not how large every
|
|
270
|
+
# intermediate string expression may grow. Row MD5 concatenates many columns in one shot, and
|
|
271
|
+
# Teradata caps those intermediates/clients/smaller widths (often around 32K bytes in practice),
|
|
272
|
+
# which yields error 3798 long before inputs hit the 64K DDL ceiling. Generated row-hash SQL
|
|
273
|
+
# therefore uses VARCHAR(32000); this splitting budget mirrors that cast: floor(0.8 * 32000).
|
|
274
|
+
Platform.TERADATA: 25_600,
|
|
271
275
|
# character varying(n): n may not exceed 10,485,760 characters.
|
|
272
276
|
Platform.POSTGRESQL: 8_388_608,
|
|
273
277
|
# VARCHAR width up to 65,535 bytes (64K − 1); limits are in bytes.
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import pytest
|
|
17
17
|
|
|
18
18
|
from snowflake.snowflake_data_validation.utils.column_grouping import (
|
|
19
|
+
compute_teradata_row_md5_column_groups,
|
|
19
20
|
compute_unified_column_groups,
|
|
20
21
|
estimate_normalized_column_length,
|
|
21
22
|
group_columns_for_md5,
|
|
@@ -206,3 +207,26 @@ class TestComputeUnifiedColumnGroups:
|
|
|
206
207
|
tgt = [_col("a", "NUMBER"), _col("b", "NUMBER")]
|
|
207
208
|
result = compute_unified_column_groups(src, tgt, max_concat_length=100_000)
|
|
208
209
|
assert result is None
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
class TestComputeTeradataRowMd5ColumnGroups:
|
|
213
|
+
def test_one_column_returns_none(self) -> None:
|
|
214
|
+
src = [_col("x", "VARCHAR(10)")]
|
|
215
|
+
tgt = [_col("x", "VARCHAR(10)")]
|
|
216
|
+
assert compute_teradata_row_md5_column_groups(src, tgt) is None
|
|
217
|
+
|
|
218
|
+
def test_aligns_parallel_single_column_groups(self) -> None:
|
|
219
|
+
src = [_col("a", "INTEGER"), _col("b", "VARCHAR(5)")]
|
|
220
|
+
tgt = [_col("a", "NUMBER"), _col("b", "VARCHAR(5)")]
|
|
221
|
+
out = compute_teradata_row_md5_column_groups(src, tgt)
|
|
222
|
+
assert out is not None
|
|
223
|
+
src_g, tgt_g = out
|
|
224
|
+
assert src_g == [[src[0]], [src[1]]]
|
|
225
|
+
assert tgt_g == [[tgt[0]], [tgt[1]]]
|
|
226
|
+
|
|
227
|
+
def test_mismatched_lengths_raise(self) -> None:
|
|
228
|
+
with pytest.raises(ValueError, match="aligned column lists"):
|
|
229
|
+
compute_teradata_row_md5_column_groups(
|
|
230
|
+
[_col("a", "INT"), _col("b", "INT")],
|
|
231
|
+
[_col("a", "INT")],
|
|
232
|
+
)
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# PostgreSQL normalization expressions for row/cell validation (canonical text).
|
|
2
|
-
# POINT maps to Snowflake GEOMETRY — emit OGC WKT (space-separated coords) to
|
|
3
|
-
# align with ST_ASWKT on the Snowflake side. Native point uses subscripts;
|
|
4
|
-
# PostGIS geometry/geography use ST_AsText when present.
|
|
5
|
-
# CAST(... AS ...) is used instead of :: casts so YAML parses unambiguously.
|
|
6
|
-
# BOOLEAN / BOOL: emit lowercase true/false to match Snowflake TO_CHAR(boolean).
|
|
7
|
-
# Datatype keys below are sorted lexicographically.
|
|
8
|
-
|
|
9
|
-
ARRAY: CAST("{{ col_name }}" AS TEXT)
|
|
10
|
-
BIGINT: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
11
|
-
BIGSERIAL: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
12
|
-
BIT: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
13
|
-
BIT VARYING: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
14
|
-
BOOL: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'true' WHEN "{{ col_name }}" IS FALSE THEN 'false' END)
|
|
15
|
-
BOOLEAN: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'true' WHEN "{{ col_name }}" IS FALSE THEN 'false' END)
|
|
16
|
-
BOX: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
17
|
-
BPCHAR: TRIM("{{ col_name }}")
|
|
18
|
-
BYTEA: ENCODE("{{ col_name }}", 'hex')
|
|
19
|
-
CHAR: TRIM("{{ col_name }}")
|
|
20
|
-
CHARACTER: TRIM("{{ col_name }}")
|
|
21
|
-
CHARACTER VARYING: TRIM("{{ col_name }}")
|
|
22
|
-
CIDR: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
23
|
-
CIRCLE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
24
|
-
DATE: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD')
|
|
25
|
-
DATERANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
26
|
-
DECIMAL: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
27
|
-
DEFAULT: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
28
|
-
DOMAIN: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
29
|
-
DOUBLE PRECISION: TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(28,4)), '99999999999990.0000'))
|
|
30
|
-
ENUM: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
31
|
-
FLOAT: TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(28,4)), '99999999999990.0000'))
|
|
32
|
-
GEOGRAPHY: TRIM(ST_AsText("{{ col_name }}"))
|
|
33
|
-
GEOMETRY: TRIM(ST_AsText("{{ col_name }}"))
|
|
34
|
-
INET: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
35
|
-
INT4RANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
36
|
-
INT8RANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
37
|
-
INTEGER: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
38
|
-
INTERVAL: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
39
|
-
JSON: CAST("{{ col_name }}" AS TEXT)
|
|
40
|
-
JSONB: CAST("{{ col_name }}" AS TEXT)
|
|
41
|
-
LINE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
42
|
-
LSEG: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
43
|
-
MACADDR: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
44
|
-
MACADDR8: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
45
|
-
MONEY: TRIM(CAST(CAST("{{ col_name }}" AS NUMERIC) AS TEXT))
|
|
46
|
-
NAME: TRIM("{{ col_name }}")
|
|
47
|
-
NUMERIC: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
48
|
-
NUMRANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
49
|
-
OID: TRIM(CAST("{{ col_name }}" AS TEXT)
|
|
50
|
-
PATH: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
51
|
-
POINT: TRIM(FORMAT('POINT(%s %s)', ("{{ col_name }}")[0], ("{{ col_name }}")[1]))
|
|
52
|
-
POLYGON: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
53
|
-
REAL: TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(28,4)), '99999999999990.0000'))
|
|
54
|
-
SERIAL: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
55
|
-
SMALLINT: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
56
|
-
SMALLSERIAL: TRIM(TO_CHAR("{{ col_name }}", '99999999999990.0000'))
|
|
57
|
-
TEXT: TRIM("{{ col_name }}")
|
|
58
|
-
TIME: TO_CHAR("{{ col_name }}", 'HH24:MI:SS')
|
|
59
|
-
TIME WITH TIME ZONE: TO_CHAR(CAST("{{ col_name }}" AT TIME ZONE 'UTC' AS time), 'HH24:MI:SS')
|
|
60
|
-
TIME WITHOUT TIME ZONE: TO_CHAR("{{ col_name }}", 'HH24:MI:SS')
|
|
61
|
-
TIMESTAMP: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD-HH24:MI:SS')
|
|
62
|
-
TIMESTAMP WITH TIME ZONE: TO_CHAR("{{ col_name }}" AT TIME ZONE 'UTC', 'YYYY-MM-DD-HH24:MI:SS')
|
|
63
|
-
TIMESTAMP WITHOUT TIME ZONE: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD-HH24:MI:SS')
|
|
64
|
-
TIMESTAMPTZ: TO_CHAR("{{ col_name }}" AT TIME ZONE 'UTC', 'YYYY-MM-DD-HH24:MI:SS')
|
|
65
|
-
TIMETZ: TO_CHAR(CAST("{{ col_name }}" AT TIME ZONE 'UTC' AS time), 'HH24:MI:SS')
|
|
66
|
-
TSQUERY: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
67
|
-
TSRANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
68
|
-
TSTZRANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
69
|
-
TSVECTOR: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
70
|
-
UUID: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
71
|
-
VARBIT: TRIM(CAST("{{ col_name }}" AS TEXT))
|
|
72
|
-
VARCHAR: TRIM("{{ col_name }}")
|
|
73
|
-
XML: CAST("{{ col_name }}" AS TEXT)
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
BOOLEAN: TO_CHAR("{{ col_name }}")
|
|
2
|
-
DATE: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD')
|
|
3
|
-
FLOAT: TO_CHAR("{{ col_name }}", 'FM9999999999999999999999999999.0000')
|
|
4
|
-
NUMBER: TO_CHAR("{{ col_name }}", 'FM9999999999999999999999999999.0000')
|
|
5
|
-
TIME: TO_CHAR("{{ col_name }}", 'HH24:MI:SS')
|
|
6
|
-
TIMESTAMP_LTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD-HH24:MI:SS')
|
|
7
|
-
TIMESTAMP_NTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD-HH24:MI:SS')
|
|
8
|
-
TIMESTAMP_TZ: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD-HH24:MI:SS')
|
|
9
|
-
VARCHAR: TRIM("{{ col_name }}")
|
|
10
|
-
GEOMETRY: TRIM(ST_ASWKT("{{ col_name }}"))
|
|
11
|
-
GEOGRAPHY: TRIM(ST_ASWKT("{{ col_name }}"))
|
|
12
|
-
|
|
13
|
-
DEFAULT: TO_VARCHAR("{{ col_name }}")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|