snowflake-data-validation 1.44.1__tar.gz → 1.45.0__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.44.1 → snowflake_data_validation-1.45.0}/PKG-INFO +23 -1
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/README.md +22 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +3 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +13 -1
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +3 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +6 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +2 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +3 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +3 -1
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +2 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +1 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +2 -1
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/_internal.py +5 -15
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +8 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +8 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +5 -8
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +7 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +1 -24
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +3 -7
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +2 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +50 -5
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +3 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +17 -5
- snowflake_data_validation-1.45.0/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +32 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +16 -6
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +34 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/constants.py +2 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +48 -53
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +46 -42
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +9 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +33 -8
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +24 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +81 -6
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -30
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +35 -6
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +22 -16
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_collation.py +1 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_collation.py +1 -0
- snowflake_data_validation-1.45.0/tests/unit/Redshift/test_redshift_columns_metadata_template.py +61 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_query_generator_teradata.py +52 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_collation.py +1 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +2 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +112 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/test_query_generator_bigquery.py +1 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_xml_long_metrics.py +1 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_query_generator.py +1 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +1 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +2 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +157 -0
- snowflake_data_validation-1.45.0/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +153 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_accepted_transformation.py +36 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_column_normalization_override.py +49 -1
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_loader.py +11 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_model.py +10 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_data_validator.py +154 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_float_bit_canonical.py +1 -1
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_helper_polars_cast.py +3 -5
- snowflake_data_validation-1.45.0/tests/unit/test_helper_polars_cast_threading.py +112 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_iceberg_dv_l3_normalization.py +66 -40
- snowflake_data_validation-1.45.0/tests/unit/test_l2_count_distinct_opt_in_config.py +89 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_object_type_criterion.py +2 -2
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_query_generator_numeric_scale.py +10 -1
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_validator.py +59 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_source_validation_executor.py +2 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_sql_literal_jinja_filter.py +2 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_table_configuration.py +6 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_teradata_iso_normalization.py +34 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_configuration.py +4 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_view_configuration.py +6 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/.gitignore +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/LICENSE +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/docs/README.md +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/pyproject.toml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/conftest.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/db2/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_query_generator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_registration.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/query/test_time_fraction_rendering.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_batched_metrics_queries.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_catalog_column_size.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_cell_data_validator_threading.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_cell_validation_query_generation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_charset_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_column_selection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_column_selection_actual_names.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_decimal_text_canonical.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_dv_tracing.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_error_classifier.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_float_canonical_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_get_target_cols.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_helper_io.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_interval_common.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_iso_dv_common.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_l2_collation_metadata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_metric_identifier_rendering.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_normalize_shape_aware.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_period_common.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_query_executor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_redshift_native_timestamptz_ltz.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_schema_column_selection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_signature_external_table.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_signature_row_md5_query.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_teradata_type_code_mapping.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_timestamp_golden_vectors.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_trace_bridge.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_templates_dto.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_vector_bit_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_vector_common.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_vector_normalization.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/test_warm_start.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/utils/test_constants.py +0 -0
- {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.0}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.45.0
|
|
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/
|
|
@@ -214,6 +214,28 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
214
214
|
|
|
215
215
|
## Changelog
|
|
216
216
|
|
|
217
|
+
### v1.45.0
|
|
218
|
+
|
|
219
|
+
**New features**
|
|
220
|
+
|
|
221
|
+
- Added support for applying custom L3 normalization per side, including `targetDataType: "*"` to target the mapped type.
|
|
222
|
+
- Added the `includeCountDistinct` option; L2 `COUNT(DISTINCT)` is now off by default and opt-in globally or per table.
|
|
223
|
+
- Added support for additional table and view types in data validation, including materialized views, temporary tables, BigQuery clones and snapshots, and DB2 materialized query tables.
|
|
224
|
+
|
|
225
|
+
**Improvements**
|
|
226
|
+
|
|
227
|
+
- Improved row comparison with positional column identity, so duplicate and case-variant column names no longer collapse.
|
|
228
|
+
- Improved Redshift connection resiliency with TCP keepalive defaults.
|
|
229
|
+
- Improved L1 validation to treat native integer bits-versus-digits precision differences as compatible, reported as a warning.
|
|
230
|
+
|
|
231
|
+
**Bug fixes**
|
|
232
|
+
|
|
233
|
+
- Fixed Oracle L2 metric rows and L3 cell frames upper-casing column names, which made mixed-case columns collide.
|
|
234
|
+
- Fixed L3 failing rows over a lowercase SQL Server `UNIQUEIDENTIFIER` or an ignored `FLOAT` `targetExpression`.
|
|
235
|
+
- Fixed a possible deadlock in expression casts when validators run on several threads.
|
|
236
|
+
- Fixed Redshift and PostgreSQL `REAL` values being compared against a non-exact widened value.
|
|
237
|
+
- Fixed Iceberg `FULL_INGEST` validation to follow the lossless-only temporal promotion of the load.
|
|
238
|
+
|
|
217
239
|
### v1.44.1
|
|
218
240
|
|
|
219
241
|
**New features**
|
|
@@ -123,6 +123,28 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
123
123
|
|
|
124
124
|
## Changelog
|
|
125
125
|
|
|
126
|
+
### v1.45.0
|
|
127
|
+
|
|
128
|
+
**New features**
|
|
129
|
+
|
|
130
|
+
- Added support for applying custom L3 normalization per side, including `targetDataType: "*"` to target the mapped type.
|
|
131
|
+
- Added the `includeCountDistinct` option; L2 `COUNT(DISTINCT)` is now off by default and opt-in globally or per table.
|
|
132
|
+
- Added support for additional table and view types in data validation, including materialized views, temporary tables, BigQuery clones and snapshots, and DB2 materialized query tables.
|
|
133
|
+
|
|
134
|
+
**Improvements**
|
|
135
|
+
|
|
136
|
+
- Improved row comparison with positional column identity, so duplicate and case-variant column names no longer collapse.
|
|
137
|
+
- Improved Redshift connection resiliency with TCP keepalive defaults.
|
|
138
|
+
- Improved L1 validation to treat native integer bits-versus-digits precision differences as compatible, reported as a warning.
|
|
139
|
+
|
|
140
|
+
**Bug fixes**
|
|
141
|
+
|
|
142
|
+
- Fixed Oracle L2 metric rows and L3 cell frames upper-casing column names, which made mixed-case columns collide.
|
|
143
|
+
- Fixed L3 failing rows over a lowercase SQL Server `UNIQUEIDENTIFIER` or an ignored `FLOAT` `targetExpression`.
|
|
144
|
+
- Fixed a possible deadlock in expression casts when validators run on several threads.
|
|
145
|
+
- Fixed Redshift and PostgreSQL `REAL` values being compared against a non-exact widened value.
|
|
146
|
+
- Fixed Iceberg `FULL_INGEST` validation to follow the lossless-only temporal promotion of the load.
|
|
147
|
+
|
|
126
148
|
### v1.44.1
|
|
127
149
|
|
|
128
150
|
**New features**
|
|
@@ -52,6 +52,9 @@ NVARCHAR: '"{{ col_name }}"'
|
|
|
52
52
|
DATE: CONVERT(VARCHAR(10), "{{ col_name }}", 23)
|
|
53
53
|
# Same text as SQL Server TIME: hh:mi:ss.fffffff + '00', cut to {{ time_text_length }}.
|
|
54
54
|
TIME: LEFT(SUBSTRING(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 12, 16) + '00', {{ time_text_length }})
|
|
55
|
+
# Iceberg compatible TIME stored as VARCHAR (CETAS): the extract's own text, TIME(7)
|
|
56
|
+
# widened then '00', nine digits whatever the scale. '+' keeps NULL as NULL.
|
|
57
|
+
TIME_ICEBERG: CAST(CAST("{{ col_name }}" AS TIME(7)) AS VARCHAR(16)) + '00'
|
|
55
58
|
DATETIME: STUFF(CONVERT(VARCHAR(27), CAST(CAST("{{ col_name }}" AS DATETIME2(3)) AS DATETIME2(7)), 121), 11, 1, 'T') + '00'
|
|
56
59
|
DATETIME2: LEFT(STUFF(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 11, 1, 'T'), 26) + '000'
|
|
57
60
|
SMALLDATETIME: CONVERT(VARCHAR(19), "{{ col_name }}", 126) + '.000000000'
|
|
@@ -53,6 +53,10 @@ from snowflake.snowflake_data_validation.sqlserver.query.charset_normalization i
|
|
|
53
53
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
54
54
|
Platform,
|
|
55
55
|
)
|
|
56
|
+
from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
|
|
57
|
+
resolve_iceberg_compatible_tsql_source_normalization_key,
|
|
58
|
+
)
|
|
59
|
+
from snowflake.snowflake_data_validation.utils.iso_dv_common import get_paired_target_column_types
|
|
56
60
|
from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
57
61
|
TSQL_ROW_HASH_COLLATION_SUFFIX,
|
|
58
62
|
tsql_comparison_collation_tokens,
|
|
@@ -141,8 +145,16 @@ class QueryGeneratorAzureSynapse(TsqlFloatMetricModifierMixin, QueryGeneratorBas
|
|
|
141
145
|
datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
|
|
142
146
|
rendered: dict[str, str] = {}
|
|
143
147
|
renderer_columns = self._row_md5_normalization_columns(table_context)
|
|
148
|
+
paired_target_types = get_paired_target_column_types(table_context)
|
|
149
|
+
iceberg_spec = table_context.iceberg_spec
|
|
150
|
+
storage_mode = table_context.storage_mode
|
|
144
151
|
for column in renderer_columns:
|
|
145
|
-
lookup_key = (
|
|
152
|
+
lookup_key = resolve_iceberg_compatible_tsql_source_normalization_key(
|
|
153
|
+
(column.data_type or "").strip().upper(),
|
|
154
|
+
paired_target_type=paired_target_types.get(column.name),
|
|
155
|
+
iceberg_spec=iceberg_spec,
|
|
156
|
+
storage_mode=storage_mode,
|
|
157
|
+
)
|
|
146
158
|
normalization_template = self._lookup_normalization_template(
|
|
147
159
|
datatypes_normalization_templates,
|
|
148
160
|
lookup_key,
|
|
@@ -48,7 +48,10 @@ WITH rc_cte AS (
|
|
|
48
48
|
(
|
|
49
49
|
SELECT CASE table_type
|
|
50
50
|
WHEN 'BASE TABLE' THEN 'TABLE'
|
|
51
|
+
WHEN 'CLONE' THEN 'TABLE'
|
|
52
|
+
WHEN 'SNAPSHOT' THEN 'TABLE'
|
|
51
53
|
WHEN 'VIEW' THEN 'VIEW'
|
|
54
|
+
WHEN 'MATERIALIZED VIEW' THEN 'VIEW'
|
|
52
55
|
ELSE 'UNKNOWN'
|
|
53
56
|
END
|
|
54
57
|
FROM {{ object_database_sql }}.{{ object_schema_sql }}.INFORMATION_SCHEMA.TABLES
|
|
@@ -96,6 +96,7 @@ class ConfigurationModel(BaseModel):
|
|
|
96
96
|
self._check_max_failed_rows_number(table)
|
|
97
97
|
self._check_chunk_number(table)
|
|
98
98
|
self.set_exclude_metrics(table)
|
|
99
|
+
self.set_include_count_distinct(table)
|
|
99
100
|
self.set_apply_metric_column_modifier(table)
|
|
100
101
|
self.set_include_lob_columns_in_row_validation(table)
|
|
101
102
|
|
|
@@ -113,6 +114,7 @@ class ConfigurationModel(BaseModel):
|
|
|
113
114
|
self._check_max_failed_rows_number(view)
|
|
114
115
|
self._check_chunk_number(view)
|
|
115
116
|
self.set_exclude_metrics(view)
|
|
117
|
+
self.set_include_count_distinct(view)
|
|
116
118
|
self.set_apply_metric_column_modifier(view)
|
|
117
119
|
self.set_include_lob_columns_in_row_validation(view)
|
|
118
120
|
|
|
@@ -198,6 +200,10 @@ class ConfigurationModel(BaseModel):
|
|
|
198
200
|
if table.exclude_metrics is None:
|
|
199
201
|
table.exclude_metrics = self.validation_configuration.exclude_metrics
|
|
200
202
|
|
|
203
|
+
def set_include_count_distinct(self, table: TableConfiguration) -> None:
|
|
204
|
+
if table.include_count_distinct is None:
|
|
205
|
+
table.include_count_distinct = self.validation_configuration.include_count_distinct
|
|
206
|
+
|
|
201
207
|
def set_include_lob_columns_in_row_validation(self, table: TableConfiguration) -> None:
|
|
202
208
|
if table.include_lob_columns_in_row_validation is None:
|
|
203
209
|
table.include_lob_columns_in_row_validation = (
|
|
@@ -32,6 +32,7 @@ VISIBLE_PROPERTIES: set[str] = {
|
|
|
32
32
|
"chunk_number",
|
|
33
33
|
"column_mappings",
|
|
34
34
|
"exclude_metrics",
|
|
35
|
+
"include_count_distinct",
|
|
35
36
|
"include_lob_columns_in_row_validation",
|
|
36
37
|
"index_column_list",
|
|
37
38
|
"max_failed_rows_number",
|
|
@@ -83,6 +84,7 @@ class TableConfiguration(BaseModel):
|
|
|
83
84
|
column_mappings: dict[str, str] = {}
|
|
84
85
|
max_failed_rows_number: int | None = None
|
|
85
86
|
exclude_metrics: bool | None = None
|
|
87
|
+
include_count_distinct: bool | None = None
|
|
86
88
|
apply_metric_column_modifier: bool | None = None
|
|
87
89
|
include_lob_columns_in_row_validation: bool | None = None
|
|
88
90
|
object_type: ObjectType = ObjectType.TABLE
|
|
@@ -41,6 +41,9 @@ class ValidationConfiguration(BaseModel):
|
|
|
41
41
|
custom_templates_path: Path | None = None
|
|
42
42
|
max_failed_rows_number: int = MAX_FAILED_ROWS_NUMBER_DEFAULT_VALUE
|
|
43
43
|
exclude_metrics: bool = False
|
|
44
|
+
# L2 COUNT(DISTINCT) is opt-in (SNOW-4338258): it dominates L2 cost on the source
|
|
45
|
+
# (one SQL Server batch 26.4 s with it, 1.4 s without) and L2 is the fast metrics level.
|
|
46
|
+
include_count_distinct: bool = False
|
|
44
47
|
apply_metric_column_modifier: bool = True
|
|
45
48
|
include_lob_columns_in_row_validation: bool = False
|
|
46
49
|
|
|
@@ -49,13 +49,15 @@ SELECT
|
|
|
49
49
|
(
|
|
50
50
|
SELECT CASE TYPE
|
|
51
51
|
WHEN 'T' THEN 'TABLE'
|
|
52
|
+
WHEN 'G' THEN 'TABLE'
|
|
52
53
|
WHEN 'V' THEN 'VIEW'
|
|
54
|
+
WHEN 'S' THEN 'VIEW'
|
|
53
55
|
ELSE 'UNKNOWN'
|
|
54
56
|
END
|
|
55
57
|
FROM SYSCAT.TABLES
|
|
56
58
|
WHERE TABSCHEMA = '{{ object_schema | escape_sql_literal }}'
|
|
57
59
|
AND TABNAME = '{{ object_name | escape_sql_literal }}'
|
|
58
|
-
AND TYPE IN ('T', 'V')
|
|
60
|
+
AND TYPE IN ('T', 'G', 'V', 'S')
|
|
59
61
|
) AS OBJECT_TYPE,
|
|
60
62
|
rc.ROW_COUNT
|
|
61
63
|
FROM SYSCAT.COLUMNS C
|
|
@@ -234,6 +234,7 @@ class BaseValidationExecutor(ABC):
|
|
|
234
234
|
columns=source_table_column_metadata.columns,
|
|
235
235
|
database_name=configured_object_name(self.context.source_platform, table_configuration.source_database),
|
|
236
236
|
exclude_metrics=table_configuration.exclude_metrics,
|
|
237
|
+
include_count_distinct=bool(table_configuration.include_count_distinct),
|
|
237
238
|
fully_qualified_name=table_configuration.fully_qualified_name,
|
|
238
239
|
has_where_clause=table_configuration.has_where_clause,
|
|
239
240
|
max_failed_rows_number=table_configuration.max_failed_rows_number,
|
|
@@ -279,6 +280,7 @@ class BaseValidationExecutor(ABC):
|
|
|
279
280
|
columns=target_table_column_metadata.columns,
|
|
280
281
|
database_name=configured_object_name(self.context.target_platform, table_configuration.target_database),
|
|
281
282
|
exclude_metrics=table_configuration.exclude_metrics,
|
|
283
|
+
include_count_distinct=bool(table_configuration.include_count_distinct),
|
|
282
284
|
fully_qualified_name=table_configuration.target_fully_qualified_name,
|
|
283
285
|
has_where_clause=table_configuration.has_target_where_clause,
|
|
284
286
|
max_failed_rows_number=table_configuration.max_failed_rows_number,
|
|
@@ -128,6 +128,7 @@ class SourceValidationExecutor:
|
|
|
128
128
|
columns=source_table_column_metadata.columns,
|
|
129
129
|
database_name=configured_object_name(self.context.source_platform, table_configuration.source_database),
|
|
130
130
|
exclude_metrics=table_configuration.exclude_metrics,
|
|
131
|
+
include_count_distinct=bool(table_configuration.include_count_distinct),
|
|
131
132
|
fully_qualified_name=table_configuration.fully_qualified_name,
|
|
132
133
|
has_where_clause=table_configuration.has_where_clause,
|
|
133
134
|
max_failed_rows_number=table_configuration.max_failed_rows_number,
|
|
@@ -43,12 +43,13 @@ SELECT
|
|
|
43
43
|
SELECT CASE object_type
|
|
44
44
|
WHEN 'TABLE' THEN 'TABLE'
|
|
45
45
|
WHEN 'VIEW' THEN 'VIEW'
|
|
46
|
+
WHEN 'MATERIALIZED VIEW' THEN 'VIEW'
|
|
46
47
|
ELSE 'UNKNOWN'
|
|
47
48
|
END
|
|
48
49
|
FROM ALL_OBJECTS
|
|
49
50
|
WHERE owner = '{{ object_schema | escape_sql_literal }}'
|
|
50
51
|
AND object_name = '{{ object_name | escape_sql_literal }}'
|
|
51
|
-
AND object_type IN ('TABLE', 'VIEW')
|
|
52
|
+
AND object_type IN ('TABLE', 'VIEW', 'MATERIALIZED VIEW')
|
|
52
53
|
) AS OBJECT_TYPE,
|
|
53
54
|
rc.ROW_COUNT,
|
|
54
55
|
s.STAT_ROW_COUNT
|
|
@@ -73,7 +73,7 @@ from snowflake.snowflake_data_validation.utils.helpers.helper_dataframe import (
|
|
|
73
73
|
HelperDataFrame,
|
|
74
74
|
)
|
|
75
75
|
from snowflake.snowflake_data_validation.utils.helpers.helper_polars_cast import (
|
|
76
|
-
|
|
76
|
+
cast_polars_columns,
|
|
77
77
|
)
|
|
78
78
|
from snowflake.snowflake_data_validation.utils.model.table_column_metadata import (
|
|
79
79
|
TableColumnMetadata,
|
|
@@ -582,7 +582,7 @@ def apply_schema_to_polars_dataframe(
|
|
|
582
582
|
"""
|
|
583
583
|
datatypes_mapping = _get_snowflake_to_polars_datatypes_mapping()
|
|
584
584
|
|
|
585
|
-
|
|
585
|
+
target_types: dict[str, pl.DataType] = {}
|
|
586
586
|
for col_name, col_dtype in column_schema:
|
|
587
587
|
if col_name not in dataframe.columns:
|
|
588
588
|
continue
|
|
@@ -592,22 +592,12 @@ def apply_schema_to_polars_dataframe(
|
|
|
592
592
|
continue
|
|
593
593
|
|
|
594
594
|
target_type = datatypes_mapping[normalized_type]
|
|
595
|
-
|
|
596
|
-
if current_type == target_type:
|
|
595
|
+
if dataframe[col_name].dtype == target_type:
|
|
597
596
|
continue
|
|
598
597
|
|
|
599
|
-
|
|
600
|
-
build_polars_cast_expression(
|
|
601
|
-
col_name=col_name,
|
|
602
|
-
current_type=current_type,
|
|
603
|
-
target_type=target_type,
|
|
604
|
-
)
|
|
605
|
-
)
|
|
598
|
+
target_types[col_name] = target_type
|
|
606
599
|
|
|
607
|
-
|
|
608
|
-
dataframe = dataframe.with_columns(cast_expressions)
|
|
609
|
-
|
|
610
|
-
return dataframe
|
|
600
|
+
return cast_polars_columns(dataframe, target_types)
|
|
611
601
|
|
|
612
602
|
|
|
613
603
|
def process_table_column_metadata_internal(
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
|
+
from collections.abc import Mapping
|
|
21
|
+
|
|
20
22
|
import pandas as pd
|
|
21
23
|
|
|
22
24
|
from snowflake.snowflake_data_validation.public.model import (
|
|
@@ -89,6 +91,7 @@ def validate_metrics(
|
|
|
89
91
|
tolerance: float | None = DEFAULT_TOLERANCE,
|
|
90
92
|
relative_tolerance: float | None = None,
|
|
91
93
|
excluded_columns: list[str] | None = None,
|
|
94
|
+
target_names: Mapping[str, str] | None = None,
|
|
92
95
|
) -> ValidationResult:
|
|
93
96
|
"""Validate metrics by comparing source and target DataFrames.
|
|
94
97
|
|
|
@@ -106,6 +109,10 @@ def validate_metrics(
|
|
|
106
109
|
When both are set, a pair passes if either check passes (OR).
|
|
107
110
|
excluded_columns: Columns left out of the metrics SELECT (Iceberg v2
|
|
108
111
|
flattened VARCHAR columns); each is reported as one WARNING row.
|
|
112
|
+
target_names: Each actual source column's actual target name, resolved by
|
|
113
|
+
the caller (Cloud Data Validation: the column data migration creates).
|
|
114
|
+
With it the comparison pairs names exactly; without it, through
|
|
115
|
+
``column_mappings`` ignoring case, as the standalone CLI does.
|
|
109
116
|
|
|
110
117
|
Returns:
|
|
111
118
|
ValidationResult: The validation result.
|
|
@@ -126,6 +133,7 @@ def validate_metrics(
|
|
|
126
133
|
column_mappings=column_mappings,
|
|
127
134
|
tolerance=tolerance,
|
|
128
135
|
relative_tolerance=relative_tolerance,
|
|
136
|
+
target_names=target_names,
|
|
129
137
|
)
|
|
130
138
|
results_dataframe = append_flattened_metrics_exclusions(
|
|
131
139
|
results_dataframe,
|
|
@@ -93,6 +93,7 @@ from snowflake.snowflake_data_validation.utils.iso_dv_common import (
|
|
|
93
93
|
get_paired_source_column_types,
|
|
94
94
|
get_paired_target_column_types,
|
|
95
95
|
)
|
|
96
|
+
from snowflake.snowflake_data_validation.utils.measure_collation import COUNT_DISTINCT_METRIC
|
|
96
97
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext, configured_object_name
|
|
97
98
|
from snowflake.snowflake_data_validation.utils.qvci_fallback import (
|
|
98
99
|
resolve_teradata_metadata_is_temporary_table,
|
|
@@ -837,6 +838,9 @@ class QueryGeneratorBase(ABC):
|
|
|
837
838
|
where_clause = table_context.where_clause
|
|
838
839
|
has_where_clause = table_context.has_where_clause
|
|
839
840
|
exclude_metrics = table_context.exclude_metrics
|
|
841
|
+
# COUNT(DISTINCT) is opt-in (SNOW-4338258). `is True` so test doubles (MagicMock) that never
|
|
842
|
+
# set the attribute keep the default instead of a truthy Mock.
|
|
843
|
+
include_count_distinct = getattr(table_context, "include_count_distinct", False) is True
|
|
840
844
|
apply_metric_column_modifier = table_context.apply_metric_column_modifier
|
|
841
845
|
|
|
842
846
|
select_exprs: list[str] = []
|
|
@@ -869,6 +873,8 @@ class QueryGeneratorBase(ABC):
|
|
|
869
873
|
metric_name = row[METRIC_COLUMN_KEY]
|
|
870
874
|
if exclude_metrics and metric_name in METRICS_TO_EXCLUDE:
|
|
871
875
|
continue
|
|
876
|
+
if metric_name == COUNT_DISTINCT_METRIC and not include_count_distinct:
|
|
877
|
+
continue
|
|
872
878
|
override = column_overrides.get(metric_name)
|
|
873
879
|
if override is not None and override.removes_metric:
|
|
874
880
|
applied_override_names.add(metric_name)
|
|
@@ -908,6 +914,8 @@ class QueryGeneratorBase(ABC):
|
|
|
908
914
|
for metric_name, override in column_overrides.items():
|
|
909
915
|
if metric_name in applied_override_names or override.removes_metric or not override.metric_query:
|
|
910
916
|
continue
|
|
917
|
+
if metric_name == COUNT_DISTINCT_METRIC and not include_count_distinct:
|
|
918
|
+
continue
|
|
911
919
|
metric_expr = self._render_metric_select_expr(
|
|
912
920
|
col,
|
|
913
921
|
metric_name,
|
|
@@ -15,6 +15,11 @@ import types
|
|
|
15
15
|
|
|
16
16
|
from typing import TYPE_CHECKING, Any
|
|
17
17
|
|
|
18
|
+
from shared.redshift.constants import (
|
|
19
|
+
TCP_KEEPALIVE_COUNT,
|
|
20
|
+
TCP_KEEPALIVE_IDLE_SECONDS,
|
|
21
|
+
TCP_KEEPALIVE_INTERVAL_SECONDS,
|
|
22
|
+
)
|
|
18
23
|
from snowflake.snowflake_data_validation.connector.connector_base import (
|
|
19
24
|
ConnectorBase as BaseConnector,
|
|
20
25
|
)
|
|
@@ -46,14 +51,6 @@ that disappears mid-handshake) blocks the caller forever and the retry loop in
|
|
|
46
51
|
``connect`` never gets a turn.
|
|
47
52
|
"""
|
|
48
53
|
|
|
49
|
-
# Keepalive probes turn a silently dropped connection into an error. The OS
|
|
50
|
-
# defaults wait about two hours before the first probe; with these, a peer that
|
|
51
|
-
# stops answering is detected in about two minutes, while a live server running
|
|
52
|
-
# a long statement keeps answering the probes and is never cut off.
|
|
53
|
-
TCP_KEEPALIVE_IDLE_SECONDS = 60
|
|
54
|
-
TCP_KEEPALIVE_INTERVAL_SECONDS = 15
|
|
55
|
-
TCP_KEEPALIVE_COUNT = 4
|
|
56
|
-
|
|
57
54
|
|
|
58
55
|
@Helper.import_dependencies("redshift")
|
|
59
56
|
def import_redshift():
|
|
@@ -72,17 +72,24 @@ SELECT
|
|
|
72
72
|
c.collation_name AS collation_name
|
|
73
73
|
FROM
|
|
74
74
|
SVV_COLUMNS c
|
|
75
|
+
-- The table literals stay in the ON clauses: Redshift does not carry the WHERE
|
|
76
|
+
-- filter on c through the LEFT JOINs, so without them both views read every
|
|
77
|
+
-- constraint in the database. In WHERE they would drop no-PK columns.
|
|
75
78
|
LEFT JOIN
|
|
76
79
|
information_schema.key_column_usage kcu
|
|
77
80
|
ON c.column_name = kcu.column_name
|
|
78
81
|
AND c.table_name = kcu.table_name
|
|
79
82
|
AND c.table_schema = kcu.table_schema
|
|
83
|
+
AND kcu.table_name = '{{table_name | lower | escape_sql_literal}}'
|
|
84
|
+
AND kcu.table_schema = '{{schema_name | escape_sql_literal}}'
|
|
80
85
|
LEFT JOIN
|
|
81
86
|
information_schema.table_constraints tco
|
|
82
87
|
ON kcu.constraint_name = tco.constraint_name
|
|
83
88
|
AND kcu.table_schema = tco.table_schema
|
|
84
89
|
AND kcu.table_name = tco.table_name
|
|
85
90
|
AND tco.constraint_type = 'PRIMARY KEY'
|
|
91
|
+
AND tco.table_name = '{{table_name | lower | escape_sql_literal}}'
|
|
92
|
+
AND tco.table_schema = '{{schema_name | escape_sql_literal}}'
|
|
86
93
|
WHERE
|
|
87
94
|
c.table_name = '{{table_name | lower | escape_sql_literal}}'
|
|
88
95
|
AND c.table_schema = '{{schema_name | escape_sql_literal}}';
|
|
@@ -40,7 +40,6 @@ Python canonicalization as native VARIANT.
|
|
|
40
40
|
from __future__ import annotations
|
|
41
41
|
|
|
42
42
|
from collections.abc import Mapping
|
|
43
|
-
from typing import TYPE_CHECKING
|
|
44
43
|
|
|
45
44
|
from shared.datatypes.common import CommonType
|
|
46
45
|
from shared.datatypes.postgresql import PostgreSQLType
|
|
@@ -53,12 +52,7 @@ from snowflake.snowflake_data_validation.utils.iso_dv_common import (
|
|
|
53
52
|
is_snowflake_varchar_like_type,
|
|
54
53
|
normalize_snowflake_base_type,
|
|
55
54
|
)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if TYPE_CHECKING:
|
|
59
|
-
from snowflake.snowflake_data_validation.utils.model.templates_loader_manager import (
|
|
60
|
-
TemplatesLoaderManager,
|
|
61
|
-
)
|
|
55
|
+
from snowflake.snowflake_data_validation.validation.comparison_codec import has_custom_column_normalization
|
|
62
56
|
|
|
63
57
|
|
|
64
58
|
# Redshift's own catalog metadata query explicitly UPPER()s data_type, so
|
|
@@ -122,23 +116,6 @@ def is_cell_canonicalized_json_pair(
|
|
|
122
116
|
return normalize_snowflake_base_type(target_snowflake_type) in _REDSHIFT_SUPER_TARGET_BASE_TYPES
|
|
123
117
|
|
|
124
118
|
|
|
125
|
-
def has_custom_column_normalization(
|
|
126
|
-
column_name: str,
|
|
127
|
-
data_type: str | None,
|
|
128
|
-
column_normalization_map: Mapping[str, str] | None,
|
|
129
|
-
templates_loader_manager: TemplatesLoaderManager,
|
|
130
|
-
) -> bool:
|
|
131
|
-
"""Whether a user normalization replaces this column's template.
|
|
132
|
-
|
|
133
|
-
Either a per-column rule (*column_normalization_map*) or a workflow
|
|
134
|
-
override of its data type. Its output need not be JSON, so such a column
|
|
135
|
-
is compared as rendered rather than canonicalized.
|
|
136
|
-
"""
|
|
137
|
-
if column_normalization_map and column_name in column_normalization_map:
|
|
138
|
-
return True
|
|
139
|
-
return _normalize_redshift_source_type(data_type) in templates_loader_manager.overridden_normalization_types
|
|
140
|
-
|
|
141
|
-
|
|
142
119
|
def resolve_snowflake_redshift_super_normalization_key(
|
|
143
120
|
target_snowflake_type: str,
|
|
144
121
|
source_data_type: str | None,
|
|
@@ -19,9 +19,6 @@ TIMESTAMP_TZ: REGEXP_REPLACE(TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.
|
|
|
19
19
|
# Paired PostgreSQL timestamptz: compare UTC instants (Oracle/Teradata use TIMESTAMP_TZ).
|
|
20
20
|
TIMESTAMP_TZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF9') || '+00:00'
|
|
21
21
|
VARCHAR_ISO_TZ: REGEXP_REPLACE(TO_CHAR(TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}")), 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
|
|
22
|
-
# Iceberg v2 + compatible target overlays (microsecond / FF6).
|
|
23
|
-
TIMESTAMP_LTZ_FF6: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF6')
|
|
24
|
-
TIMESTAMP_LTZ_UTC_FF6: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF6')
|
|
25
22
|
# Canonical UTC-instant form for every Snowflake TIMESTAMP_LTZ mirror of a
|
|
26
23
|
# UTC-instant TIMESTAMPTZ source (Redshift / PostgreSQL), reached from either
|
|
27
24
|
# the native path (iceberg_spec and storage_mode both None, target
|
|
@@ -29,10 +26,6 @@ TIMESTAMP_LTZ_UTC_FF6: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-
|
|
|
29
26
|
# compatible overlay (TIMESTAMP_LTZ(6)). Source side emits the same
|
|
30
27
|
# FF9-padded +00:00 string.
|
|
31
28
|
TIMESTAMP_LTZ_UTC_FF9_OFFSET: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF9') || '+00:00'
|
|
32
|
-
TIMESTAMP_NTZ_FF6: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF6')
|
|
33
|
-
TIMESTAMP_TZ_FF6: REGEXP_REPLACE(TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF6TZH:TZM'), 'Z$', '+00:00')
|
|
34
|
-
TIMESTAMP_TZ_UTC_FF6: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF6') || '+00:00'
|
|
35
|
-
VARCHAR_ISO_TZ_FF6: REGEXP_REPLACE(TO_CHAR(TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}")), 'YYYY-MM-DD"T"HH24:MI:SS.FF6TZH:TZM'), 'Z$', '+00:00')
|
|
36
29
|
# Complex values flattened to VARCHAR under Iceberg compatible DDL retain the
|
|
37
30
|
# exact Redshift JSON_SERIALIZE text staged by UNLOAD. Compare that migration
|
|
38
31
|
# representation directly: PARSE_JSON + TO_JSON recursively sorts object keys
|
|
@@ -82,6 +75,9 @@ PERIOD(TIMESTAMP_TZ): "REPLACE(REPLACE('[' || TRIM(TO_CHAR(PERIOD_BEGIN(\"{{ col
|
|
|
82
75
|
PERIOD(TIMESTAMP): "'[' || TRIM(TO_CHAR(PERIOD_BEGIN(\"{{ col_name }}\"), 'YYYY-MM-DD HH24:MI:SS.FF6')) || ', ' || TRIM(TO_CHAR(PERIOD_END(\"{{ col_name }}\"), 'YYYY-MM-DD HH24:MI:SS.FF6')) || ')'"
|
|
83
76
|
PERIOD: TRIM(CAST("{{ col_name }}" AS VARCHAR))
|
|
84
77
|
VARCHAR: '"{{ col_name }}"'
|
|
78
|
+
# Text mirror of a SQL Server / Synapse UNIQUEIDENTIFIER: T-SQL renders a GUID in uppercase,
|
|
79
|
+
# so uppercase the mirror, which keeps the case it was loaded with.
|
|
80
|
+
VARCHAR_UNIQUEIDENTIFIER: UPPER("{{ col_name }}")
|
|
85
81
|
# Spatial → WKT for L3 hashing. One _wkt_despace.sql.j2 base chain, parameterized on
|
|
86
82
|
# wkt_input, so native geo (ST_ASWKT) and flattened geo (stored WKT text) can't drift,
|
|
87
83
|
# and Snowflake matches PostGIS / SQL Server / Oracle / Teradata / Redshift / BigQuery.
|
|
@@ -18,7 +18,9 @@ SELECT
|
|
|
18
18
|
(
|
|
19
19
|
SELECT CASE TABLE_TYPE
|
|
20
20
|
WHEN 'BASE TABLE' THEN 'TABLE'
|
|
21
|
+
WHEN 'LOCAL TEMPORARY' THEN 'TABLE'
|
|
21
22
|
WHEN 'VIEW' THEN 'VIEW'
|
|
23
|
+
WHEN 'MATERIALIZED VIEW' THEN 'VIEW'
|
|
22
24
|
ELSE 'UNKNOWN'
|
|
23
25
|
END
|
|
24
26
|
FROM {{ object_database_ref }}.INFORMATION_SCHEMA.TABLES
|
|
@@ -70,6 +70,9 @@ from snowflake.snowflake_data_validation.sqlserver.sqlserver_tz_normalization im
|
|
|
70
70
|
from snowflake.snowflake_data_validation.sqlserver.sqlserver_tz_normalization import (
|
|
71
71
|
resolve_snowflake_timestamp_tz_metrics_key as resolve_sqlserver_timestamp_tz_metrics_key,
|
|
72
72
|
)
|
|
73
|
+
from snowflake.snowflake_data_validation.sqlserver.sqlserver_uniqueidentifier_normalization import (
|
|
74
|
+
resolve_snowflake_uniqueidentifier_normalization_key,
|
|
75
|
+
)
|
|
73
76
|
from snowflake.snowflake_data_validation.teradata.teradata_iso_normalization import (
|
|
74
77
|
resolve_snowflake_timestamp_tz_normalization_key as resolve_teradata_timestamp_tz_normalization_key,
|
|
75
78
|
)
|
|
@@ -95,6 +98,7 @@ from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
|
95
98
|
TARGET_CHARACTER_TYPES,
|
|
96
99
|
)
|
|
97
100
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
101
|
+
from snowflake.snowflake_data_validation.utils.model.templates_loader_manager import TemplatesLoaderManager
|
|
98
102
|
from snowflake.snowflake_data_validation.utils.period_common import (
|
|
99
103
|
resolve_snowflake_period_normalization_key,
|
|
100
104
|
)
|
|
@@ -110,6 +114,7 @@ from snowflake.snowflake_data_validation.utils.vector_normalization import (
|
|
|
110
114
|
from snowflake.snowflake_data_validation.validation.comparison_codec import (
|
|
111
115
|
ComparisonCodec,
|
|
112
116
|
apply_text_codec_to_renderer_templates,
|
|
117
|
+
has_custom_column_normalization,
|
|
113
118
|
resolve_column_normalization_template,
|
|
114
119
|
)
|
|
115
120
|
|
|
@@ -128,9 +133,20 @@ _PAIRED_SOURCE_NORMALIZATION_KEY_RESOLVERS: dict[Platform, tuple[_NormalizationK
|
|
|
128
133
|
),
|
|
129
134
|
Platform.DB2: (resolve_snowflake_db2_lob_normalization_key,),
|
|
130
135
|
Platform.TERADATA: (resolve_teradata_timestamp_tz_normalization_key,),
|
|
131
|
-
Platform.SQLSERVER: (
|
|
136
|
+
Platform.SQLSERVER: (
|
|
137
|
+
resolve_sqlserver_datetimeoffset_ltz_utc_normalization_key,
|
|
138
|
+
resolve_snowflake_uniqueidentifier_normalization_key,
|
|
139
|
+
),
|
|
140
|
+
Platform.AZURE_SYNAPSE: (resolve_snowflake_uniqueidentifier_normalization_key,),
|
|
132
141
|
}
|
|
133
142
|
|
|
143
|
+
# Resolvers that only re-render the mirror's own text, with no source-side template
|
|
144
|
+
# paired to their key (as a LOB digest is), so a workflow or custom templates YAML
|
|
145
|
+
# override of the mirror's type replaces them: that override is what the user hashes.
|
|
146
|
+
_TYPE_OVERRIDE_YIELDING_RESOLVERS: frozenset[_NormalizationKeyResolver] = frozenset(
|
|
147
|
+
{resolve_snowflake_uniqueidentifier_normalization_key},
|
|
148
|
+
)
|
|
149
|
+
|
|
134
150
|
|
|
135
151
|
# Per-source-platform resolvers for the key of a Snowflake ``TIMESTAMP_TZ`` mirror's
|
|
136
152
|
# L2 min/max normalization, ``(target_key, paired_source_type) -> target_key``.
|
|
@@ -146,10 +162,25 @@ def resolve_paired_source_normalization_key(
|
|
|
146
162
|
paired_source_platform: Platform | None,
|
|
147
163
|
target_key: str,
|
|
148
164
|
paired_source_type: str | None,
|
|
165
|
+
templates_loader_manager: TemplatesLoaderManager,
|
|
149
166
|
) -> str:
|
|
150
|
-
"""Apply the paired source platform's registered normalization-key resolvers.
|
|
167
|
+
"""Apply the paired source platform's registered normalization-key resolvers.
|
|
168
|
+
|
|
169
|
+
A resolver's key keeps the incoming one when the templates lack it (a custom
|
|
170
|
+
templates YAML copied before the key existed), so that YAML's own template for the
|
|
171
|
+
type applies rather than ``DEFAULT``, and, for a
|
|
172
|
+
:data:`_TYPE_OVERRIDE_YIELDING_RESOLVERS` resolver, when the user overrode the
|
|
173
|
+
incoming type.
|
|
174
|
+
"""
|
|
175
|
+
templates = templates_loader_manager.datatypes_normalization_templates
|
|
176
|
+
overridden_types = templates_loader_manager.overridden_normalization_types
|
|
151
177
|
for resolve in _PAIRED_SOURCE_NORMALIZATION_KEY_RESOLVERS.get(paired_source_platform, ()):
|
|
152
|
-
|
|
178
|
+
resolved = resolve(target_key, paired_source_type)
|
|
179
|
+
if resolved == target_key or resolved not in templates:
|
|
180
|
+
continue
|
|
181
|
+
if resolve in _TYPE_OVERRIDE_YIELDING_RESOLVERS and normalize_snowflake_base_type(target_key) in overridden_types:
|
|
182
|
+
continue
|
|
183
|
+
target_key = resolved
|
|
153
184
|
return target_key
|
|
154
185
|
|
|
155
186
|
|
|
@@ -268,9 +299,17 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
268
299
|
*,
|
|
269
300
|
paired_source_platform: Platform | None = None,
|
|
270
301
|
paired_source_type: str | None = None,
|
|
302
|
+
has_custom_normalization: bool = False,
|
|
271
303
|
) -> str:
|
|
304
|
+
"""Render *template* for *column*; a FLOAT column hashes its binary64 tuple.
|
|
305
|
+
|
|
306
|
+
``has_custom_normalization`` marks *template* as the user's (a column's
|
|
307
|
+
``targetExpression``, or a workflow or custom templates YAML override of its
|
|
308
|
+
type): it is rendered as written, FLOAT included, as the source side renders
|
|
309
|
+
its own.
|
|
310
|
+
"""
|
|
272
311
|
target_base, _, _ = self._parse_type_precision_scale(getattr(column, "data_type", "") or "")
|
|
273
|
-
if target_base in SNOWFLAKE_FLOAT_TYPE_NAMES:
|
|
312
|
+
if target_base in SNOWFLAKE_FLOAT_TYPE_NAMES and not has_custom_normalization:
|
|
274
313
|
return build_snowflake_float_bit_canonical_expr(write_identifier_for_sql(column.name))
|
|
275
314
|
if (
|
|
276
315
|
paired_source_platform == Platform.TERADATA
|
|
@@ -321,6 +360,7 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
321
360
|
table_context.paired_source_platform,
|
|
322
361
|
data_type,
|
|
323
362
|
paired.get(column_name),
|
|
363
|
+
table_context.templates_loader_manager,
|
|
324
364
|
)
|
|
325
365
|
from snowflake.snowflake_data_validation.redshift.redshift_super_normalization import (
|
|
326
366
|
SNOWFLAKE_REDSHIFT_SUPER_NORMALIZATION_KEY,
|
|
@@ -411,6 +451,12 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
411
451
|
column,
|
|
412
452
|
paired_source_platform=table_context.paired_source_platform,
|
|
413
453
|
paired_source_type=paired_source_types.get(column.name),
|
|
454
|
+
has_custom_normalization=has_custom_column_normalization(
|
|
455
|
+
column.name,
|
|
456
|
+
column.data_type,
|
|
457
|
+
column_normalization_map,
|
|
458
|
+
table_context.templates_loader_manager,
|
|
459
|
+
),
|
|
414
460
|
)
|
|
415
461
|
renderer_templates[column.name] = rendered
|
|
416
462
|
renderer_templates = apply_text_codec_to_renderer_templates(
|
|
@@ -706,7 +752,6 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
706
752
|
SNOWFLAKE_REDSHIFT_SUPER_JSON_ONLY_NORMALIZATION_KEY,
|
|
707
753
|
SNOWFLAKE_REDSHIFT_SUPER_NORMALIZATION_KEY,
|
|
708
754
|
SNOWFLAKE_VARIANT_JSON_NORMALIZATION_KEY,
|
|
709
|
-
has_custom_column_normalization,
|
|
710
755
|
is_cell_canonicalized_json_pair,
|
|
711
756
|
resolve_snowflake_redshift_super_normalization_key,
|
|
712
757
|
)
|
|
@@ -39,6 +39,9 @@ TEXT: CONVERT(VARCHAR(MAX), "{{ col_name }}")
|
|
|
39
39
|
# maps 'time' to .NET TimeSpan, where 'HH' is the literal "HH". '00' pads to nine
|
|
40
40
|
# digits, then LEFT cuts to the precision both sides share ({{ time_text_length }}).
|
|
41
41
|
TIME: LEFT(SUBSTRING(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 12, 16) + '00', {{ time_text_length }})
|
|
42
|
+
# Iceberg compatible TIME stored as VARCHAR (CETAS): the extract's own text, TIME(7)
|
|
43
|
+
# widened then '00', nine digits whatever the scale. '+' keeps NULL as NULL.
|
|
44
|
+
TIME_ICEBERG: CAST(CAST("{{ col_name }}" AS TIME(7)) AS VARCHAR(16)) + '00'
|
|
42
45
|
TIMESTAMP: UPPER(CONVERT(VARCHAR(MAX), CAST("{{ col_name }}" AS VARBINARY(8)), 2))
|
|
43
46
|
ROWVERSION: UPPER(CONVERT(VARCHAR(MAX), CAST("{{ col_name }}" AS VARBINARY(8)), 2))
|
|
44
47
|
TINYINT: CONVERT(VARCHAR(20), "{{ col_name }}")
|