snowflake-data-validation 1.42.2__tar.gz → 1.42.3__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.42.2 → snowflake_data_validation-1.42.3}/PKG-INFO +13 -1
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/README.md +12 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +18 -3
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +6 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +8 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +45 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +44 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +20 -7
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +95 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +38 -0
- snowflake_data_validation-1.42.3/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +140 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_float_bit_canonical.py +4 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_iceberg_dv_l3_normalization.py +13 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_iso_dv_common.py +136 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_query_generator_numeric_scale.py +6 -1
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_timestamp_golden_vectors.py +68 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/.gitignore +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/LICENSE +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/docs/README.md +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/pyproject.toml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/constants.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/test_redshift_collation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Teradata/test_teradata_collation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/db2/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/db2/test_db2_query_generator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/db2/test_db2_registration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_oracle_query_generator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_accepted_transformation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_batched_metrics_queries.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_catalog_column_size.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_cell_data_validator_threading.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_cell_validation_query_generation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_charset_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_column_normalization_override.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_data_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_float_canonical_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_get_target_cols.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_interval_common.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_l2_collation_metadata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_metric_identifier_rendering.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_normalize_shape_aware.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_postgresql_normalization_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_query_executor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_qvci_fallback_triggers.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_redshift_native_timestamptz_ltz.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_row_count_bigint_overflow.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_row_data_validator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_row_hash_column_delimiter.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_schema_column_selection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_signature_external_table.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_signature_row_md5_query.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_sql_catalog_template_guard.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_sync_validation_executor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_table_context.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_telemetry.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_validation_templates_dto.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_vector_bit_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_vector_common.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_vector_normalization.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/test_warm_start.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/tests/unit/utils/test_constants.py +0 -0
- {snowflake_data_validation-1.42.2 → snowflake_data_validation-1.42.3}/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.42.
|
|
3
|
+
Version: 1.42.3
|
|
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/
|
|
@@ -190,6 +190,18 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
190
190
|
|
|
191
191
|
## Changelog
|
|
192
192
|
|
|
193
|
+
### v1.42.3
|
|
194
|
+
|
|
195
|
+
**Improvements**
|
|
196
|
+
|
|
197
|
+
- Improved comparison of clock values stored as `VARCHAR` in Iceberg metrics.
|
|
198
|
+
- Added support for staging Redshift `REAL` NaN and infinity values without aborting the extract.
|
|
199
|
+
|
|
200
|
+
**Bug fixes**
|
|
201
|
+
|
|
202
|
+
- Fixed false L2 mismatch on T-SQL integer `STDDEV` columns.
|
|
203
|
+
- Fixed Redshift `TIMETZ` source-vs-target value mismatch in L2 validation.
|
|
204
|
+
|
|
193
205
|
### v1.42.2
|
|
194
206
|
|
|
195
207
|
No user-facing changes in this release.
|
|
@@ -99,6 +99,18 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
99
99
|
|
|
100
100
|
## Changelog
|
|
101
101
|
|
|
102
|
+
### v1.42.3
|
|
103
|
+
|
|
104
|
+
**Improvements**
|
|
105
|
+
|
|
106
|
+
- Improved comparison of clock values stored as `VARCHAR` in Iceberg metrics.
|
|
107
|
+
- Added support for staging Redshift `REAL` NaN and infinity values without aborting the extract.
|
|
108
|
+
|
|
109
|
+
**Bug fixes**
|
|
110
|
+
|
|
111
|
+
- Fixed false L2 mismatch on T-SQL integer `STDDEV` columns.
|
|
112
|
+
- Fixed Redshift `TIMETZ` source-vs-target value mismatch in L2 validation.
|
|
113
|
+
|
|
102
114
|
### v1.42.2
|
|
103
115
|
|
|
104
116
|
No user-facing changes in this release.
|
|
@@ -63,8 +63,13 @@ INT:
|
|
|
63
63
|
metric_query: SUM(CAST("{{ col_name }}" {{ modifier }} AS BIGINT))
|
|
64
64
|
metric_return_datatype: BIGINT
|
|
65
65
|
metric_column_modifier: "% 2097143"
|
|
66
|
+
# Exact integer variance (SNOW-4229286): n*SUM(x^2) - SUM(x)^2 in DECIMAL(38, 0), only the
|
|
67
|
+
# final SQRT in FLOAT. STDEVP over FLOAT cancels catastrophically when values are large
|
|
68
|
+
# and spread small (inventory.inv_date_sk: 0-5.5 vs Snowflake 3.5 on identical data).
|
|
69
|
+
# 32-bit values keep n*SUM(x^2) inside DECIMAL(38) even with the modifier off; BIGINT
|
|
70
|
+
# stays on FLOAT STDEVP because raw 64-bit squares would overflow it.
|
|
66
71
|
stddev:
|
|
67
|
-
metric_query:
|
|
72
|
+
metric_query: SQRT(CAST(COUNT_BIG("{{ col_name }}") * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0)) * CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) - SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) AS FLOAT)) / NULLIF(COUNT_BIG("{{ col_name }}"), 0)
|
|
68
73
|
metric_return_datatype: FLOAT
|
|
69
74
|
metric_column_modifier: "% 2097143"
|
|
70
75
|
|
|
@@ -92,8 +97,13 @@ SMALLINT:
|
|
|
92
97
|
metric_query: SUM(CAST("{{ col_name }}" {{ modifier }} AS BIGINT))
|
|
93
98
|
metric_return_datatype: BIGINT
|
|
94
99
|
metric_column_modifier: "% 2097143"
|
|
100
|
+
# Exact integer variance (SNOW-4229286): n*SUM(x^2) - SUM(x)^2 in DECIMAL(38, 0), only the
|
|
101
|
+
# final SQRT in FLOAT. STDEVP over FLOAT cancels catastrophically when values are large
|
|
102
|
+
# and spread small (inventory.inv_date_sk: 0-5.5 vs Snowflake 3.5 on identical data).
|
|
103
|
+
# 32-bit values keep n*SUM(x^2) inside DECIMAL(38) even with the modifier off; BIGINT
|
|
104
|
+
# stays on FLOAT STDEVP because raw 64-bit squares would overflow it.
|
|
95
105
|
stddev:
|
|
96
|
-
metric_query:
|
|
106
|
+
metric_query: SQRT(CAST(COUNT_BIG("{{ col_name }}") * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0)) * CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) - SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) AS FLOAT)) / NULLIF(COUNT_BIG("{{ col_name }}"), 0)
|
|
97
107
|
metric_return_datatype: FLOAT
|
|
98
108
|
metric_column_modifier: "% 2097143"
|
|
99
109
|
|
|
@@ -121,8 +131,13 @@ TINYINT:
|
|
|
121
131
|
metric_query: SUM(CAST("{{ col_name }}" {{ modifier }} AS BIGINT))
|
|
122
132
|
metric_return_datatype: BIGINT
|
|
123
133
|
metric_column_modifier: "% 2097143"
|
|
134
|
+
# Exact integer variance (SNOW-4229286): n*SUM(x^2) - SUM(x)^2 in DECIMAL(38, 0), only the
|
|
135
|
+
# final SQRT in FLOAT. STDEVP over FLOAT cancels catastrophically when values are large
|
|
136
|
+
# and spread small (inventory.inv_date_sk: 0-5.5 vs Snowflake 3.5 on identical data).
|
|
137
|
+
# 32-bit values keep n*SUM(x^2) inside DECIMAL(38) even with the modifier off; BIGINT
|
|
138
|
+
# stays on FLOAT STDEVP because raw 64-bit squares would overflow it.
|
|
124
139
|
stddev:
|
|
125
|
-
metric_query:
|
|
140
|
+
metric_query: SQRT(CAST(COUNT_BIG("{{ col_name }}") * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0)) * CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) - SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) AS FLOAT)) / NULLIF(COUNT_BIG("{{ col_name }}"), 0)
|
|
126
141
|
metric_return_datatype: FLOAT
|
|
127
142
|
metric_column_modifier: "% 2097143"
|
|
128
143
|
|
|
@@ -666,13 +666,17 @@ TIME WITHOUT TIME ZONE:
|
|
|
666
666
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
667
667
|
metric_return_datatype: BIGINT
|
|
668
668
|
|
|
669
|
+
# TIMETZ migrates to TIMESTAMP_TZ on a 1970-01-01 sentinel (Snowflake has no
|
|
670
|
+
# offset-aware TIME); render min/max like the L3 template so both sides match.
|
|
669
671
|
TIMETZ:
|
|
670
672
|
min:
|
|
671
673
|
metric_query: MIN("{{ col_name }}")
|
|
672
674
|
metric_return_datatype: TIMETZ
|
|
675
|
+
metric_normalization: "'1970-01-01T' || TO_CHAR((CURRENT_DATE + {{ metric_query }}) AT TIME ZONE 'UTC', 'HH24:MI:SS.US') || '000+00:00'"
|
|
673
676
|
max:
|
|
674
677
|
metric_query: MAX("{{ col_name }}")
|
|
675
678
|
metric_return_datatype: TIMETZ
|
|
679
|
+
metric_normalization: "'1970-01-01T' || TO_CHAR((CURRENT_DATE + {{ metric_query }}) AT TIME ZONE 'UTC', 'HH24:MI:SS.US') || '000+00:00'"
|
|
676
680
|
count_null:
|
|
677
681
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
678
682
|
metric_return_datatype: BIGINT
|
|
@@ -681,9 +685,11 @@ TIME WITH TIME ZONE:
|
|
|
681
685
|
min:
|
|
682
686
|
metric_query: MIN("{{ col_name }}")
|
|
683
687
|
metric_return_datatype: TIMETZ
|
|
688
|
+
metric_normalization: "'1970-01-01T' || TO_CHAR((CURRENT_DATE + {{ metric_query }}) AT TIME ZONE 'UTC', 'HH24:MI:SS.US') || '000+00:00'"
|
|
684
689
|
max:
|
|
685
690
|
metric_query: MAX("{{ col_name }}")
|
|
686
691
|
metric_return_datatype: TIMETZ
|
|
692
|
+
metric_normalization: "'1970-01-01T' || TO_CHAR((CURRENT_DATE + {{ metric_query }}) AT TIME ZONE 'UTC', 'HH24:MI:SS.US') || '000+00:00'"
|
|
687
693
|
count_null:
|
|
688
694
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
689
695
|
metric_return_datatype: BIGINT
|
|
@@ -112,9 +112,17 @@ def _ln_power_tme_canonical_expr(col_ref: str) -> str:
|
|
|
112
112
|
f"ELSE SUBSTRING({mantissa_base}, 1, {decimal_pos} - 1) || "
|
|
113
113
|
f"CASE WHEN {fraction_trimmed} = '' THEN '' ELSE '.' || {fraction_trimmed} END END"
|
|
114
114
|
)
|
|
115
|
+
# NaN and ±Inf must return before the NUMERIC cast. Redshift raises 8001
|
|
116
|
+
# (numeric_bound.cpp, "scale float to decimal") if either reaches it.
|
|
117
|
+
# A stored REAL NaN does not compare equal to ``'NaN'::float4``; its text does.
|
|
118
|
+
# ±Inf does compare equal to the float8 literals. Snowflake TO_DOUBLE accepts
|
|
119
|
+
# the texts below.
|
|
115
120
|
return (
|
|
116
121
|
f"CASE WHEN {col_ref} IS NULL THEN NULL "
|
|
117
122
|
f"WHEN {col_ref} = 0 THEN '0E0' "
|
|
123
|
+
f"WHEN LOWER(CAST({col_ref} AS VARCHAR)) = 'nan' THEN 'nan' "
|
|
124
|
+
f"WHEN {col_ref} = 'Infinity'::float8 THEN 'inf' "
|
|
125
|
+
f"WHEN {col_ref} = '-Infinity'::float8 THEN '-inf' "
|
|
118
126
|
f"ELSE UPPER({mantissa_trimmed}) || 'E' || TRIM(CAST({exp_int} AS VARCHAR)) END"
|
|
119
127
|
)
|
|
120
128
|
|
|
@@ -186,6 +186,51 @@ VARCHAR_ISO_TZ:
|
|
|
186
186
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
187
187
|
metric_return_datatype: NUMBER
|
|
188
188
|
|
|
189
|
+
# VARCHAR mirror of a source clock. Parse the text, then emit FF6 and drop an
|
|
190
|
+
# all-zero fraction (the literal '.000000' that TO_CHAR FF6 always writes).
|
|
191
|
+
# TIME WITH TIME ZONE uses its own parser: TRY_TO_TIMESTAMP_TZ without a format
|
|
192
|
+
# returns NULL for 'HH:MI:SS±HH:MM' text.
|
|
193
|
+
VARCHAR_TIME:
|
|
194
|
+
min:
|
|
195
|
+
metric_query: MIN(TRY_TO_TIME(TRIM("{{ col_name }}")))
|
|
196
|
+
metric_return_datatype: VARCHAR
|
|
197
|
+
metric_normalization: REPLACE(TO_CHAR({{ metric_query }}, 'HH24:MI:SS.FF6'), '.000000', '')
|
|
198
|
+
max:
|
|
199
|
+
metric_query: MAX(TRY_TO_TIME(TRIM("{{ col_name }}")))
|
|
200
|
+
metric_return_datatype: VARCHAR
|
|
201
|
+
metric_normalization: REPLACE(TO_CHAR({{ metric_query }}, 'HH24:MI:SS.FF6'), '.000000', '')
|
|
202
|
+
count_null:
|
|
203
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
204
|
+
metric_return_datatype: NUMBER
|
|
205
|
+
|
|
206
|
+
VARCHAR_TIMESTAMP:
|
|
207
|
+
min:
|
|
208
|
+
metric_query: MIN(TRY_TO_TIMESTAMP_NTZ(TRIM("{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF9'))
|
|
209
|
+
metric_return_datatype: VARCHAR
|
|
210
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
|
|
211
|
+
max:
|
|
212
|
+
metric_query: MAX(TRY_TO_TIMESTAMP_NTZ(TRIM("{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF9'))
|
|
213
|
+
metric_return_datatype: VARCHAR
|
|
214
|
+
metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
|
|
215
|
+
count_null:
|
|
216
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
217
|
+
metric_return_datatype: NUMBER
|
|
218
|
+
|
|
219
|
+
# Order by UTC time-of-day. A plain MIN of the parsed instant uses today's date
|
|
220
|
+
# and can cross midnight, so the formatted value would keep the wrong offset.
|
|
221
|
+
VARCHAR_TIME_TZ:
|
|
222
|
+
min:
|
|
223
|
+
metric_query: MIN_BY(TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}"), 'HH24:MI:SS.FF6TZH:TZM'), TIME(CONVERT_TIMEZONE('UTC', TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}"), 'HH24:MI:SS.FF6TZH:TZM'))))
|
|
224
|
+
metric_return_datatype: VARCHAR
|
|
225
|
+
metric_normalization: REPLACE(REGEXP_REPLACE(TO_CHAR({{ metric_query }}, 'HH24:MI:SS.FF6TZH:TZM'), 'Z$', '+00:00'), '.000000', '')
|
|
226
|
+
max:
|
|
227
|
+
metric_query: MAX_BY(TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}"), 'HH24:MI:SS.FF6TZH:TZM'), TIME(CONVERT_TIMEZONE('UTC', TRY_TO_TIMESTAMP_TZ(TRIM("{{ col_name }}"), 'HH24:MI:SS.FF6TZH:TZM'))))
|
|
228
|
+
metric_return_datatype: VARCHAR
|
|
229
|
+
metric_normalization: REPLACE(REGEXP_REPLACE(TO_CHAR({{ metric_query }}, 'HH24:MI:SS.FF6TZH:TZM'), 'Z$', '+00:00'), '.000000', '')
|
|
230
|
+
count_null:
|
|
231
|
+
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
232
|
+
metric_return_datatype: NUMBER
|
|
233
|
+
|
|
189
234
|
# Paired PostgreSQL BYTEA / SQL Server VARBINARY mirrors.
|
|
190
235
|
BINARY:
|
|
191
236
|
min:
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
import logging
|
|
18
|
+
import re
|
|
18
19
|
|
|
19
20
|
import pandas as pd
|
|
20
21
|
|
|
@@ -50,6 +51,7 @@ from snowflake.snowflake_data_validation.teradata.teradata_iso_normalization imp
|
|
|
50
51
|
)
|
|
51
52
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
52
53
|
COL_NAME_NO_QUOTES_PLACEHOLDER,
|
|
54
|
+
COL_NAME_QUOTES_PLACEHOLDER,
|
|
53
55
|
EXPLICIT_METRIC_NORMALIZATION_COLUMN_KEY,
|
|
54
56
|
METRIC_QUERY_PLACEHOLDER,
|
|
55
57
|
NORMALIZATION_COLUMN_KEY,
|
|
@@ -61,6 +63,7 @@ from snowflake.snowflake_data_validation.utils.iso_dv_common import (
|
|
|
61
63
|
normalize_snowflake_base_type,
|
|
62
64
|
resolve_snowflake_interval_normalization_key,
|
|
63
65
|
resolve_snowflake_iso_tz_varchar_metrics_type,
|
|
66
|
+
resolve_snowflake_varchar_temporal_metrics_type,
|
|
64
67
|
)
|
|
65
68
|
from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
66
69
|
COUNT_DISTINCT_METRIC,
|
|
@@ -133,6 +136,23 @@ def build_snowflake_float_bit_canonical_expr(col_ref: str) -> str:
|
|
|
133
136
|
return build_binary64_canonical_expr(col_ref)
|
|
134
137
|
|
|
135
138
|
|
|
139
|
+
# Paired T-SQL sources whose L2 stddev is exact integer math (SNOW-4229286). Snowflake must
|
|
140
|
+
# match it: STDDEV_POP over FLOAT drifts too (0.0055 on 3M identical inv_date_sk values).
|
|
141
|
+
_EXACT_STDDEV_SOURCE_PLATFORMS = (Platform.SQLSERVER, Platform.AZURE_SYNAPSE)
|
|
142
|
+
_EXACT_STDDEV_SOURCE_TYPES = frozenset({"INT", "SMALLINT", "TINYINT"})
|
|
143
|
+
_FLOAT_STDDEV_POP_RE = re.compile(r"STDDEV_POP\(CAST\((?P<operand>.+) AS FLOAT\)\)")
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def _exact_integer_stddev(metric_template: str) -> str | None:
|
|
147
|
+
"""Rewrite ``STDDEV_POP(CAST(x AS FLOAT))`` as exact ``SQRT(n*SUM(x^2) - SUM(x)^2) / n``."""
|
|
148
|
+
match = _FLOAT_STDDEV_POP_RE.fullmatch(metric_template.strip())
|
|
149
|
+
if not match:
|
|
150
|
+
return None
|
|
151
|
+
col = COL_NAME_QUOTES_PLACEHOLDER
|
|
152
|
+
x = f"CAST({match.group('operand')} AS NUMBER(38, 0))"
|
|
153
|
+
return f"SQRT(CAST(COUNT({col}) * SUM({x} * {x}) - SUM({x}) * SUM({x}) AS FLOAT)) / NULLIF(COUNT({col}), 0)"
|
|
154
|
+
|
|
155
|
+
|
|
136
156
|
class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
137
157
|
"""Snowflake-specific implementation of query generator."""
|
|
138
158
|
|
|
@@ -417,6 +437,15 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
417
437
|
)
|
|
418
438
|
if iso_tz_type:
|
|
419
439
|
return iso_tz_type
|
|
440
|
+
temporal_text_type = resolve_snowflake_varchar_temporal_metrics_type(
|
|
441
|
+
col.data_type,
|
|
442
|
+
paired_source,
|
|
443
|
+
paired_source_platform=table_context.paired_source_platform,
|
|
444
|
+
iceberg_spec=table_context.iceberg_spec,
|
|
445
|
+
storage_mode=table_context.storage_mode,
|
|
446
|
+
)
|
|
447
|
+
if temporal_text_type:
|
|
448
|
+
return temporal_text_type
|
|
420
449
|
if target_base in {"TEXT", "STRING"}:
|
|
421
450
|
return "VARCHAR"
|
|
422
451
|
return target_base or col.data_type
|
|
@@ -438,6 +467,8 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
438
467
|
if metric_name == "count_null":
|
|
439
468
|
return metric_template
|
|
440
469
|
paired_source_type = get_paired_source_column_types(table_context).get(col.name)
|
|
470
|
+
if metric_name == "stddev":
|
|
471
|
+
return self._paired_stddev_template(metric_template, paired_source_type, table_context)
|
|
441
472
|
if not is_blank_padded_char_type(paired_source_type or ""):
|
|
442
473
|
return metric_template
|
|
443
474
|
if not should_rtrim_snowflake_for_padded_source(col.data_type, paired_source_type, metric_template):
|
|
@@ -445,6 +476,19 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
|
|
|
445
476
|
quoted_col = f'"{COL_NAME_NO_QUOTES_PLACEHOLDER}"'
|
|
446
477
|
return metric_template.replace(quoted_col, wrap_rtrim(quoted_col))
|
|
447
478
|
|
|
479
|
+
@staticmethod
|
|
480
|
+
def _paired_stddev_template(
|
|
481
|
+
metric_template: str,
|
|
482
|
+
paired_source_type: str | None,
|
|
483
|
+
table_context: TableContext,
|
|
484
|
+
) -> str:
|
|
485
|
+
"""Use the exact integer stddev the paired T-SQL source computes, else keep the template."""
|
|
486
|
+
if getattr(table_context, "paired_source_platform", None) not in _EXACT_STDDEV_SOURCE_PLATFORMS:
|
|
487
|
+
return metric_template
|
|
488
|
+
if (paired_source_type or "").upper().split("(")[0].strip() not in _EXACT_STDDEV_SOURCE_TYPES:
|
|
489
|
+
return metric_template
|
|
490
|
+
return _exact_integer_stddev(metric_template) or metric_template
|
|
491
|
+
|
|
448
492
|
def _resolve_metric_normalization(
|
|
449
493
|
self,
|
|
450
494
|
col,
|
|
@@ -260,10 +260,13 @@ INT:
|
|
|
260
260
|
metric_query: SUM(CAST("{{ col_name }}" {{ modifier }} AS BIGINT))
|
|
261
261
|
metric_return_datatype: BIGINT
|
|
262
262
|
metric_column_modifier: "% 2097143"
|
|
263
|
-
#
|
|
264
|
-
#
|
|
265
|
-
|
|
266
|
-
|
|
263
|
+
# Exact integer variance (SNOW-4229286): n*SUM(x^2) - SUM(x)^2 in DECIMAL(38, 0), only the
|
|
264
|
+
# final SQRT in FLOAT. STDEVP over FLOAT cancels catastrophically when values are large
|
|
265
|
+
# and spread small (inventory.inv_date_sk: 0-5.5 vs Snowflake 3.5 on identical data).
|
|
266
|
+
# 32-bit values keep n*SUM(x^2) inside DECIMAL(38) even with the modifier off; BIGINT
|
|
267
|
+
# stays on FLOAT STDEVP because raw 64-bit squares would overflow it.
|
|
268
|
+
stddev:
|
|
269
|
+
metric_query: SQRT(CAST(COUNT_BIG("{{ col_name }}") * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0)) * CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) - SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) AS FLOAT)) / NULLIF(COUNT_BIG("{{ col_name }}"), 0)
|
|
267
270
|
metric_return_datatype: FLOAT
|
|
268
271
|
metric_column_modifier: "% 2097143"
|
|
269
272
|
|
|
@@ -479,8 +482,13 @@ SMALLINT:
|
|
|
479
482
|
metric_query: SUM(CAST("{{ col_name }}" {{ modifier }} AS BIGINT))
|
|
480
483
|
metric_return_datatype: BIGINT
|
|
481
484
|
metric_column_modifier: "% 2097143"
|
|
482
|
-
|
|
483
|
-
|
|
485
|
+
# Exact integer variance (SNOW-4229286): n*SUM(x^2) - SUM(x)^2 in DECIMAL(38, 0), only the
|
|
486
|
+
# final SQRT in FLOAT. STDEVP over FLOAT cancels catastrophically when values are large
|
|
487
|
+
# and spread small (inventory.inv_date_sk: 0-5.5 vs Snowflake 3.5 on identical data).
|
|
488
|
+
# 32-bit values keep n*SUM(x^2) inside DECIMAL(38) even with the modifier off; BIGINT
|
|
489
|
+
# stays on FLOAT STDEVP because raw 64-bit squares would overflow it.
|
|
490
|
+
stddev:
|
|
491
|
+
metric_query: SQRT(CAST(COUNT_BIG("{{ col_name }}") * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0)) * CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) - SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) AS FLOAT)) / NULLIF(COUNT_BIG("{{ col_name }}"), 0)
|
|
484
492
|
metric_return_datatype: FLOAT
|
|
485
493
|
metric_column_modifier: "% 2097143"
|
|
486
494
|
|
|
@@ -572,8 +580,13 @@ TINYINT:
|
|
|
572
580
|
metric_query: SUM(CAST("{{ col_name }}" {{ modifier }} AS BIGINT))
|
|
573
581
|
metric_return_datatype: BIGINT
|
|
574
582
|
metric_column_modifier: "% 2097143"
|
|
583
|
+
# Exact integer variance (SNOW-4229286): n*SUM(x^2) - SUM(x)^2 in DECIMAL(38, 0), only the
|
|
584
|
+
# final SQRT in FLOAT. STDEVP over FLOAT cancels catastrophically when values are large
|
|
585
|
+
# and spread small (inventory.inv_date_sk: 0-5.5 vs Snowflake 3.5 on identical data).
|
|
586
|
+
# 32-bit values keep n*SUM(x^2) inside DECIMAL(38) even with the modifier off; BIGINT
|
|
587
|
+
# stays on FLOAT STDEVP because raw 64-bit squares would overflow it.
|
|
575
588
|
stddev:
|
|
576
|
-
metric_query:
|
|
589
|
+
metric_query: SQRT(CAST(COUNT_BIG("{{ col_name }}") * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0)) * CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) - SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) * SUM(CAST("{{ col_name }}" {{ modifier }} AS DECIMAL(38, 0))) AS FLOAT)) / NULLIF(COUNT_BIG("{{ col_name }}"), 0)
|
|
577
590
|
metric_return_datatype: FLOAT
|
|
578
591
|
metric_column_modifier: "% 2097143"
|
|
579
592
|
|
|
@@ -14,6 +14,8 @@ from __future__ import annotations
|
|
|
14
14
|
|
|
15
15
|
import re
|
|
16
16
|
|
|
17
|
+
from enum import StrEnum
|
|
18
|
+
|
|
17
19
|
import pandas as pd
|
|
18
20
|
|
|
19
21
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
@@ -23,6 +25,9 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
23
25
|
NOT_APPLICABLE_CRITERIA_VALUE,
|
|
24
26
|
Platform,
|
|
25
27
|
)
|
|
28
|
+
from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
|
|
29
|
+
is_iceberg_compatible_dv_profile,
|
|
30
|
+
)
|
|
26
31
|
from snowflake.snowflake_data_validation.utils.interval_common import (
|
|
27
32
|
SNOWFLAKE_INTERVAL_DV_FAMILIES,
|
|
28
33
|
normalize_interval_datatype_key,
|
|
@@ -39,6 +44,49 @@ _SNOWFLAKE_TIMESTAMP_FAMILY = frozenset({"TIMESTAMP_NTZ", "TIMESTAMP_TZ", "TIMES
|
|
|
39
44
|
PAIRED_TARGET_COLUMN_TYPES_ATTR = "paired_target_column_types"
|
|
40
45
|
PAIRED_SOURCE_COLUMN_TYPES_ATTR = "paired_source_column_types"
|
|
41
46
|
VARCHAR_ISO_TZ_METRICS_TYPE = "VARCHAR_ISO_TZ"
|
|
47
|
+
VARCHAR_TIME_METRICS_TYPE = "VARCHAR_TIME"
|
|
48
|
+
VARCHAR_TIMESTAMP_METRICS_TYPE = "VARCHAR_TIMESTAMP"
|
|
49
|
+
VARCHAR_TIME_TZ_METRICS_TYPE = "VARCHAR_TIME_TZ"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class _IsoClockTextKey(StrEnum):
|
|
53
|
+
"""Lookup key for a source clock whose extract writes the template text.
|
|
54
|
+
|
|
55
|
+
``TIME_TZ`` is synthesized from ``TIME … WITH TIME ZONE``. The other
|
|
56
|
+
members match the leading catalog token.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
TIME = "TIME"
|
|
60
|
+
TIME_TZ = "TIME_TZ"
|
|
61
|
+
TIMESTAMP = "TIMESTAMP"
|
|
62
|
+
DATETIME = "DATETIME"
|
|
63
|
+
DATETIME2 = "DATETIME2"
|
|
64
|
+
SMALLDATETIME = "SMALLDATETIME"
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# SQL Server and Azure Synapse emit the same datetime text canon.
|
|
68
|
+
_SQLSERVER_DATETIME_CLOCK_METRICS: dict[_IsoClockTextKey, str] = {
|
|
69
|
+
_IsoClockTextKey.DATETIME: VARCHAR_TIMESTAMP_METRICS_TYPE,
|
|
70
|
+
_IsoClockTextKey.DATETIME2: VARCHAR_TIMESTAMP_METRICS_TYPE,
|
|
71
|
+
_IsoClockTextKey.SMALLDATETIME: VARCHAR_TIMESTAMP_METRICS_TYPE,
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
# Redshift TIME and PostgreSQL TIMESTAMP are absent: their extract is not that canon.
|
|
75
|
+
_ISO_CLOCK_TEXT_METRICS: dict[Platform, dict[_IsoClockTextKey, str]] = {
|
|
76
|
+
Platform.TERADATA: {
|
|
77
|
+
_IsoClockTextKey.TIME: VARCHAR_TIME_METRICS_TYPE,
|
|
78
|
+
_IsoClockTextKey.TIME_TZ: VARCHAR_TIME_TZ_METRICS_TYPE,
|
|
79
|
+
_IsoClockTextKey.TIMESTAMP: VARCHAR_TIMESTAMP_METRICS_TYPE,
|
|
80
|
+
},
|
|
81
|
+
Platform.REDSHIFT: {
|
|
82
|
+
_IsoClockTextKey.TIMESTAMP: VARCHAR_TIMESTAMP_METRICS_TYPE,
|
|
83
|
+
},
|
|
84
|
+
Platform.ORACLE: {
|
|
85
|
+
_IsoClockTextKey.TIMESTAMP: VARCHAR_TIMESTAMP_METRICS_TYPE,
|
|
86
|
+
},
|
|
87
|
+
Platform.SQLSERVER: _SQLSERVER_DATETIME_CLOCK_METRICS,
|
|
88
|
+
Platform.AZURE_SYNAPSE: _SQLSERVER_DATETIME_CLOCK_METRICS,
|
|
89
|
+
}
|
|
42
90
|
|
|
43
91
|
_MAPPED_VARCHAR_LENGTH_RE = re.compile(
|
|
44
92
|
r"^\s*VARCHAR\s*\(\s*(\d+)\s*\)\s*$",
|
|
@@ -113,6 +161,53 @@ def resolve_snowflake_iso_tz_varchar_metrics_type(
|
|
|
113
161
|
return None
|
|
114
162
|
|
|
115
163
|
|
|
164
|
+
def _iso_clock_text_key(source_data_type: str) -> _IsoClockTextKey | None:
|
|
165
|
+
"""Return the extract-canon key for a source clock label."""
|
|
166
|
+
upper = source_data_type.strip().upper()
|
|
167
|
+
if not upper or upper.startswith("PERIOD") or "WITH LOCAL TIME ZONE" in upper:
|
|
168
|
+
return None
|
|
169
|
+
leading = upper.split("(", 1)[0].strip().split()[0]
|
|
170
|
+
has_time_zone = "WITH TIME ZONE" in upper
|
|
171
|
+
if leading == _IsoClockTextKey.TIME and has_time_zone:
|
|
172
|
+
return _IsoClockTextKey.TIME_TZ
|
|
173
|
+
if leading == _IsoClockTextKey.TIME:
|
|
174
|
+
return _IsoClockTextKey.TIME
|
|
175
|
+
if leading == _IsoClockTextKey.TIMESTAMP and not has_time_zone:
|
|
176
|
+
return _IsoClockTextKey.TIMESTAMP
|
|
177
|
+
if leading in _SQLSERVER_DATETIME_CLOCK_METRICS:
|
|
178
|
+
return _IsoClockTextKey(leading)
|
|
179
|
+
return None
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def resolve_snowflake_varchar_temporal_metrics_type(
|
|
183
|
+
target_snowflake_type: str,
|
|
184
|
+
source_data_type: str | None,
|
|
185
|
+
*,
|
|
186
|
+
paired_source_platform: Platform | None = None,
|
|
187
|
+
iceberg_spec: str | None = None,
|
|
188
|
+
storage_mode: str | None = None,
|
|
189
|
+
) -> str | None:
|
|
190
|
+
"""Return the VARCHAR clock metric key when this extract writes that canon.
|
|
191
|
+
|
|
192
|
+
Iceberg compatible stores some source clocks as VARCHAR. The parser is
|
|
193
|
+
selected only for a platform whose extract emits the template text.
|
|
194
|
+
Any other pairing stays on VARCHAR length metrics.
|
|
195
|
+
"""
|
|
196
|
+
if not source_data_type:
|
|
197
|
+
return None
|
|
198
|
+
if not is_iceberg_compatible_dv_profile(iceberg_spec, storage_mode):
|
|
199
|
+
return None
|
|
200
|
+
if normalize_snowflake_base_type(target_snowflake_type) not in _VARCHAR_LIKE_SNOWFLAKE_BASE_TYPES:
|
|
201
|
+
return None
|
|
202
|
+
clock_key = _iso_clock_text_key(source_data_type)
|
|
203
|
+
if clock_key is None or paired_source_platform is None:
|
|
204
|
+
return None
|
|
205
|
+
platform_metrics = _ISO_CLOCK_TEXT_METRICS.get(paired_source_platform)
|
|
206
|
+
if platform_metrics is None:
|
|
207
|
+
return None
|
|
208
|
+
return platform_metrics.get(clock_key)
|
|
209
|
+
|
|
210
|
+
|
|
116
211
|
def is_snowflake_varchar_like_type(data_type: str | None) -> bool:
|
|
117
212
|
"""Return True for any Snowflake VARCHAR-family catalog label.
|
|
118
213
|
|
|
@@ -96,3 +96,41 @@ def test_timetz_l1_enrichment_clears_source_scale() -> None:
|
|
|
96
96
|
)
|
|
97
97
|
|
|
98
98
|
assert enriched["NUMERIC_SCALE"].isna().all()
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
_METRICS_YAML = _TEMPLATES / "redshift_column_metrics_templates.yaml"
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@pytest.fixture(scope="module")
|
|
105
|
+
def metrics_templates() -> dict[str, dict[str, dict[str, str]]]:
|
|
106
|
+
"""Load Redshift L2 column metrics templates from disk."""
|
|
107
|
+
with _METRICS_YAML.open(encoding="utf-8") as handle:
|
|
108
|
+
return yaml.safe_load(handle)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
@pytest.mark.parametrize("metric", ["min", "max"])
|
|
112
|
+
@pytest.mark.parametrize("redshift_type", _TIMETZ_ALIASES)
|
|
113
|
+
def test_timetz_l2_min_max_emit_unix_epoch_sentinel_utc_iso(
|
|
114
|
+
metrics_templates: dict[str, dict[str, dict[str, str]]],
|
|
115
|
+
redshift_type: str,
|
|
116
|
+
metric: str,
|
|
117
|
+
) -> None:
|
|
118
|
+
"""L2 min/max must render the same sentinel TIMESTAMP_TZ text as L3.
|
|
119
|
+
|
|
120
|
+
Snowflake reports MIN/MAX of the TIMESTAMP_TZ mirror as
|
|
121
|
+
``1970-01-01T12:00:00.000000000+00:00``; a bare ``12:00:00+00:00`` from
|
|
122
|
+
Redshift would flag equal values as different.
|
|
123
|
+
"""
|
|
124
|
+
from snowflake.snowflake_data_validation.query.query_generator_base import (
|
|
125
|
+
QueryGeneratorBase,
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
entry = metrics_templates[redshift_type][metric]
|
|
129
|
+
normalization = entry.get("metric_normalization")
|
|
130
|
+
assert normalization, f"{redshift_type}.{metric} has no metric_normalization"
|
|
131
|
+
aggregate = f'{metric.upper()}("COL_TIMETZ")'
|
|
132
|
+
rendered = QueryGeneratorBase._wrap_metric_with_normalization(normalization, aggregate)
|
|
133
|
+
assert rendered == (
|
|
134
|
+
f"'1970-01-01T' || TO_CHAR((CURRENT_DATE + {aggregate}) AT TIME ZONE 'UTC', "
|
|
135
|
+
"'HH24:MI:SS.US') || '000+00:00'"
|
|
136
|
+
)
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Copyright 2026 Snowflake Inc.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""T-SQL integer stddev is computed exactly, not by STDEVP over FLOAT (SNOW-4229286).
|
|
5
|
+
|
|
6
|
+
STDEVP(CAST(col AS FLOAT)) cancels catastrophically when values are large and the spread
|
|
7
|
+
small: dmvf-benchmark #158 saw inventory.inv_date_sk stddev swing 0-5.5 per partition on
|
|
8
|
+
SQL Server while Snowflake reported a steady 3.5 on identical data (MIN/MAX/SUM/AVG all
|
|
9
|
+
matched). 32-bit integer columns now get n*SUM(x^2) - SUM(x)^2 in DECIMAL(38, 0), with only
|
|
10
|
+
the final SQRT in FLOAT, and the Snowflake side of those pairings does the same in NUMBER(38, 0)
|
|
11
|
+
because its STDDEV_POP over FLOAT drifts as well (0.0055 on 3M identical values).
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import math
|
|
17
|
+
|
|
18
|
+
from types import SimpleNamespace
|
|
19
|
+
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
|
|
22
|
+
import pytest
|
|
23
|
+
import yaml
|
|
24
|
+
|
|
25
|
+
from jinja2 import Template
|
|
26
|
+
|
|
27
|
+
from snowflake.snowflake_data_validation.snowflake.query.query_generator_snowflake import (
|
|
28
|
+
QueryGeneratorSnowflake,
|
|
29
|
+
)
|
|
30
|
+
from snowflake.snowflake_data_validation.utils.constants import Platform
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
TEMPLATES_ROOT = Path(__file__).resolve().parents[3] / "src/snowflake/snowflake_data_validation"
|
|
34
|
+
TEMPLATE_FILES = {
|
|
35
|
+
"sqlserver": TEMPLATES_ROOT / "sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml",
|
|
36
|
+
"azure_synapse": TEMPLATES_ROOT
|
|
37
|
+
/ "azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml",
|
|
38
|
+
}
|
|
39
|
+
INTEGER_TYPES = ("INT", "SMALLINT", "TINYINT")
|
|
40
|
+
MODIFIER = "% 2097143"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _stddev(platform: str, section: str) -> dict:
|
|
44
|
+
return yaml.safe_load(TEMPLATE_FILES[platform].read_text())[section]["stddev"]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@pytest.mark.parametrize("platform", TEMPLATE_FILES)
|
|
48
|
+
@pytest.mark.parametrize("section", INTEGER_TYPES)
|
|
49
|
+
def test_integer_stddev_uses_exact_decimal_variance(platform, section):
|
|
50
|
+
metric = _stddev(platform, section)
|
|
51
|
+
query = metric["metric_query"]
|
|
52
|
+
assert "STDEVP" not in query, f"{platform}.{section} still uses float STDEVP: {query}"
|
|
53
|
+
assert "AS DECIMAL(38, 0)" in query
|
|
54
|
+
assert "COUNT_BIG(" in query
|
|
55
|
+
assert "NULLIF(COUNT_BIG(" in query, "empty partition must yield NULL, not divide by zero"
|
|
56
|
+
assert metric["metric_column_modifier"] == MODIFIER
|
|
57
|
+
assert metric["metric_return_datatype"] == "FLOAT"
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@pytest.mark.parametrize("platform", TEMPLATE_FILES)
|
|
61
|
+
def test_bigint_stddev_stays_on_float(platform):
|
|
62
|
+
# Raw 64-bit squares overflow DECIMAL(38) once the modifier is turned off.
|
|
63
|
+
assert _stddev(platform, "BIGINT")["metric_query"].startswith("STDEVP(CAST(")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@pytest.mark.parametrize("platform", TEMPLATE_FILES)
|
|
67
|
+
def test_rendered_query_applies_modifier_to_every_operand(platform):
|
|
68
|
+
rendered = Template(_stddev(platform, "INT")["metric_query"]).render(
|
|
69
|
+
col_name="INV_DATE_SK", modifier=MODIFIER
|
|
70
|
+
)
|
|
71
|
+
assert rendered.count(f'CAST("INV_DATE_SK" {MODIFIER} AS DECIMAL(38, 0))') == 4
|
|
72
|
+
assert rendered.count('COUNT_BIG("INV_DATE_SK")') == 2
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def test_formula_matches_population_stddev_where_float_cancels():
|
|
76
|
+
# Two weekly date keys, as in an inventory partition: exact answer is 3.5.
|
|
77
|
+
values = [2451000 % 2097143] * 3_000_000 + [2451007 % 2097143] * 3_000_000
|
|
78
|
+
n = len(values)
|
|
79
|
+
s = sum(values)
|
|
80
|
+
ss = sum(v * v for v in values)
|
|
81
|
+
assert math.sqrt(n * ss - s * s) / n == pytest.approx(3.5, abs=1e-9)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
SNOWFLAKE_TEMPLATES = (
|
|
85
|
+
TEMPLATES_ROOT / "snowflake/extractor/templates/snowflake_column_metrics_templates.yaml"
|
|
86
|
+
)
|
|
87
|
+
# Other-pairing cases only need a shape the regex accepts. The rewrite case loads
|
|
88
|
+
# NUMBER.stddev from YAML so a template edit that misses _FLOAT_STDDEV_POP_RE fails here
|
|
89
|
+
# instead of silently keeping float STDDEV_POP.
|
|
90
|
+
SNOWFLAKE_FLOAT_STDDEV = 'STDDEV_POP(CAST("{{ col_name }}" % 2097143 AS FLOAT))'
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _snowflake_number_stddev_template() -> str:
|
|
94
|
+
metric = yaml.safe_load(SNOWFLAKE_TEMPLATES.read_text())["NUMBER"]["stddev"]
|
|
95
|
+
return metric["metric_query"].replace("{{ modifier }}", metric["metric_column_modifier"])
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _snowflake_ctx(platform, source_type):
|
|
99
|
+
return SimpleNamespace(
|
|
100
|
+
paired_source_platform=platform,
|
|
101
|
+
paired_source_column_types={"INV_DATE_SK": source_type},
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
@pytest.mark.parametrize("platform", [Platform.SQLSERVER, Platform.AZURE_SYNAPSE])
|
|
106
|
+
@pytest.mark.parametrize("source_type", ["int", "SMALLINT", "TINYINT"])
|
|
107
|
+
def test_snowflake_matches_exact_tsql_integer_stddev(platform, source_type):
|
|
108
|
+
template = _snowflake_number_stddev_template()
|
|
109
|
+
assert "STDDEV_POP(CAST(" in template
|
|
110
|
+
query = QueryGeneratorSnowflake._paired_stddev_template(
|
|
111
|
+
template, source_type, _snowflake_ctx(platform, source_type)
|
|
112
|
+
)
|
|
113
|
+
assert "STDDEV_POP" not in query
|
|
114
|
+
assert query.count('CAST("{{ col_name }}" % 2097143 AS NUMBER(38, 0))') == 4
|
|
115
|
+
assert query.endswith('/ NULLIF(COUNT("{{ col_name }}"), 0)')
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def test_paired_stddev_keeps_template_when_shape_misses():
|
|
119
|
+
raw = 'STDDEV_POP("x")'
|
|
120
|
+
query = QueryGeneratorSnowflake._paired_stddev_template(
|
|
121
|
+
raw, "int", _snowflake_ctx(Platform.SQLSERVER, "int")
|
|
122
|
+
)
|
|
123
|
+
assert query == raw
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@pytest.mark.parametrize(
|
|
127
|
+
("platform", "source_type"),
|
|
128
|
+
[
|
|
129
|
+
(Platform.SQLSERVER, "bigint"),
|
|
130
|
+
(Platform.SQLSERVER, "decimal(18,2)"),
|
|
131
|
+
(Platform.ORACLE, "NUMBER"),
|
|
132
|
+
(Platform.TERADATA, "INTEGER"),
|
|
133
|
+
(None, None),
|
|
134
|
+
],
|
|
135
|
+
)
|
|
136
|
+
def test_snowflake_keeps_float_stddev_for_other_pairings(platform, source_type):
|
|
137
|
+
query = QueryGeneratorSnowflake._paired_stddev_template(
|
|
138
|
+
SNOWFLAKE_FLOAT_STDDEV, source_type, _snowflake_ctx(platform, source_type)
|
|
139
|
+
)
|
|
140
|
+
assert query == SNOWFLAKE_FLOAT_STDDEV
|
|
@@ -92,6 +92,10 @@ def test_redshift_tme_shims_remain_for_data_migration_staging() -> None:
|
|
|
92
92
|
real_expr = build_redshift_real_tme_shim("v")
|
|
93
93
|
assert float_expr == real_expr
|
|
94
94
|
assert "'0E0'" in real_expr
|
|
95
|
+
assert "WHEN LOWER(CAST(v AS VARCHAR)) = 'nan' THEN 'nan'" in real_expr
|
|
96
|
+
assert "WHEN v = 'Infinity'::float8 THEN 'inf'" in real_expr
|
|
97
|
+
assert "WHEN v = '-Infinity'::float8 THEN '-inf'" in real_expr
|
|
98
|
+
assert real_expr.index("= 'nan'") < real_expr.index("NUMERIC(38, 15)")
|
|
95
99
|
assert "POWER(10" in real_expr
|
|
96
100
|
assert "'0|0|0'" not in real_expr
|
|
97
101
|
|