snowflake-data-validation 1.43.0__tar.gz → 1.44.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/.gitignore +1 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/PKG-INFO +67 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/README.md +64 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/pyproject.toml +3 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +3 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +25 -14
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +71 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +8 -8
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +13 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +15 -7
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +4 -2
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +1 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +10 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +7 -7
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +8 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +2 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +3 -0
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +91 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +155 -4
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +34 -9
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +2 -2
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +18 -5
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +7 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +34 -15
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +17 -6
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +30 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +93 -10
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +6 -13
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +10 -4
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +3 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +16 -5
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +2 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +24 -9
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +28 -0
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +39 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +25 -8
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +4 -12
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +4 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +39 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +8 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +7 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +11 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +11 -4
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +140 -27
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +211 -62
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +47 -2
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +13 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +9 -6
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +240 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +3 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +5 -5
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +11 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +35 -2
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +26 -0
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +10 -0
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +8 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +4 -4
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +3 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +11 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +186 -96
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +10 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +3 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +86 -25
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +16 -16
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +71 -0
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +10 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +8 -8
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +13 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +1 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +17 -3
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +42 -0
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +32 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +1 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +13 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +4 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +8 -2
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +12 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +58 -15
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +17 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +9 -24
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +1 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +12 -33
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/constants.py +26 -0
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +108 -0
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/error_classifier.py +291 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +66 -2
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +14 -13
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +64 -11
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +104 -28
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +36 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +8 -13
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +40 -19
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +298 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +263 -149
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +30 -5
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/period_common.py +406 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +91 -3
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +174 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +34 -98
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +3 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +3 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +86 -5
- snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +109 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +266 -20
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +133 -20
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +4 -2
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +22 -2
- snowflake_data_validation-1.44.0/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +73 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Postgresql/test_postgresql_collation.py +11 -3
- snowflake_data_validation-1.44.0/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +100 -0
- snowflake_data_validation-1.44.0/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +52 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_connector_redshift.py +63 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_collation.py +18 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_super_normalization.py +146 -2
- snowflake_data_validation-1.44.0/tests/unit/Teradata/test_period_varchar_l1.py +69 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_collation.py +4 -0
- snowflake_data_validation-1.44.0/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +161 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +23 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +6 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +90 -48
- snowflake_data_validation-1.44.0/tests/unit/conftest.py +60 -0
- snowflake_data_validation-1.44.0/tests/unit/db2/test_db2_lob_dv_generation.py +170 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/db2/test_db2_query_generator.py +167 -0
- snowflake_data_validation-1.44.0/tests/unit/db2/test_db2_xml_long_dv_generation.py +147 -0
- snowflake_data_validation-1.44.0/tests/unit/db2/test_db2_xml_long_metrics.py +124 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +8 -7
- snowflake_data_validation-1.44.0/tests/unit/oracle/test_oracle_configured_index_columns.py +171 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +8 -2
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_lob_normalization.py +14 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_normalization_templates.py +11 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_query_generator.py +120 -7
- snowflake_data_validation-1.44.0/tests/unit/oracle/test_oracle_quoted_identifiers.py +127 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +17 -0
- snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +109 -0
- snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_json.py +46 -0
- snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +154 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +27 -7
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +143 -46
- snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +82 -0
- snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +78 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_accepted_transformation.py +1 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_batched_metrics_queries.py +87 -2
- snowflake_data_validation-1.44.0/tests/unit/test_catalog_queries_take_actual_names.py +109 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_cell_validation_query_generation.py +10 -10
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_charset_normalization.py +13 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_column_normalization_override.py +2 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_column_partitioning_strategy.py +21 -0
- snowflake_data_validation-1.44.0/tests/unit/test_column_selection.py +168 -0
- snowflake_data_validation-1.44.0/tests/unit/test_column_selection_actual_names.py +310 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_file_editor.py +32 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_file_generator.py +55 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_file_synchronizer.py +31 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_loader.py +73 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_model.py +10 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_custom_templates_models.py +103 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_data_validator.py +422 -0
- snowflake_data_validation-1.44.0/tests/unit/test_dv_tracing.py +218 -0
- snowflake_data_validation-1.44.0/tests/unit/test_error_classifier.py +213 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_float_bit_canonical.py +22 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_float_canonical_templates.py +35 -1
- snowflake_data_validation-1.44.0/tests/unit/test_helper_io.py +97 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_helpers.py +108 -5
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_iceberg_dv_l3_normalization.py +101 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_iceberg_v2_metrics_exclusion.py +66 -21
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_iso_dv_common.py +193 -8
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_l2_collation_metadata.py +55 -2
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metric_identifier_rendering.py +75 -2
- snowflake_data_validation-1.44.0/tests/unit/test_object_type_criterion.py +116 -0
- snowflake_data_validation-1.44.0/tests/unit/test_parallel_execution_engine_fatal_errors.py +47 -0
- snowflake_data_validation-1.44.0/tests/unit/test_period_common.py +185 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_generator_numeric_scale.py +48 -3
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_qvci_fallback_triggers.py +69 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_redshift_native_timestamptz_ltz.py +2 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_data_validator.py +308 -0
- snowflake_data_validation-1.44.0/tests/unit/test_row_data_validator_empty_chunk.py +88 -0
- snowflake_data_validation-1.44.0/tests/unit/test_row_validation_lob_exclusion.py +446 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_schema_column_selection.py +119 -33
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_signature_row_md5_query.py +1 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_snowflake_binary_normalization_templates.py +1 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +99 -21
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sql_literal_jinja_filter.py +26 -13
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sqlserver_multi_version_support.py +7 -5
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sync_executor_qvci_fallback.py +24 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sync_validation_executor.py +184 -4
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_configuration.py +6 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_context.py +117 -60
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_telemetry.py +28 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_templates_loader_manager.py +22 -0
- snowflake_data_validation-1.44.0/tests/unit/test_teradata_timetz_metric_domain.py +178 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_timestamp_golden_vectors.py +33 -26
- snowflake_data_validation-1.44.0/tests/unit/test_trace_bridge.py +193 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_configuration.py +4 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_execution_context.py +12 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_vector_bit_normalization.py +1 -1
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_view_configuration.py +6 -0
- snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -60
- snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -126
- snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -11
- snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -10
- snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -8
- snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -52
- snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -10
- snowflake_data_validation-1.43.0/tests/unit/test_teradata_timetz_metric_domain.py +0 -98
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/LICENSE +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/docs/README.md +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/db2/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/db2/test_db2_registration.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_catalog_column_size.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_cell_data_validator_threading.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_connector_snowflake.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_get_target_cols.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_interval_common.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_normalize_shape_aware.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_executor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_signature_external_table.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_teradata_type_code_mapping.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_templates_dto.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_vector_common.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_vector_normalization.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_warm_start.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/utils/test_constants.py +0 -0
- {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: snowflake-data-validation
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.44.0
|
|
4
4
|
Summary: Snowflake Data Validation
|
|
5
5
|
Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
|
|
6
6
|
Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
|
|
@@ -38,7 +38,7 @@ Requires-Dist: pydantic-yaml>=1.4.0
|
|
|
38
38
|
Requires-Dist: pydantic>=2.0
|
|
39
39
|
Requires-Dist: pyyaml>=6.0
|
|
40
40
|
Requires-Dist: ruamel-yaml>=0.18.0
|
|
41
|
-
Requires-Dist: snowflake-connector-python
|
|
41
|
+
Requires-Dist: snowflake-connector-python<5,>=4.7.1
|
|
42
42
|
Requires-Dist: toml>=0.10.2
|
|
43
43
|
Requires-Dist: typer>=0.15.3
|
|
44
44
|
Requires-Dist: typing-extensions>=4.13.2
|
|
@@ -79,7 +79,7 @@ Requires-Dist: psycopg[binary]>=3.2.0; extra == 'postgresql'
|
|
|
79
79
|
Provides-Extra: redshift
|
|
80
80
|
Requires-Dist: redshift-connector>=2.1.14; extra == 'redshift'
|
|
81
81
|
Provides-Extra: scai
|
|
82
|
-
Requires-Dist: snowflake-code-unit-registry>=0.
|
|
82
|
+
Requires-Dist: snowflake-code-unit-registry>=0.9.0; extra == 'scai'
|
|
83
83
|
Provides-Extra: sqlite
|
|
84
84
|
Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
|
|
85
85
|
Provides-Extra: sqlserver
|
|
@@ -162,6 +162,8 @@ Compares statistical metrics for each column:
|
|
|
162
162
|
- Null count
|
|
163
163
|
- Distinct count
|
|
164
164
|
|
|
165
|
+
For some types these metrics do not depend on the values themselves (for SQL Server: `VECTOR`, `XML`, `IMAGE`, `SQL_VARIANT`, `JSON`, `GEOGRAPHY`, `GEOMETRY`, `UNIQUEIDENTIFIER`), so a changed value can pass L2. Use L3 row validation to compare those columns' values. The per-type list is in `docs/data-migration-orchestrator/sqlserver-data-type-coverage.md` in this repo.
|
|
166
|
+
|
|
165
167
|
### Views
|
|
166
168
|
|
|
167
169
|
For **Redshift** and **Teradata** sources, views are validated on the view itself (no `CREATE TABLE AS SELECT` materialization in local sync mode). Other platforms may still materialize views to temporary tables before L1/L2/L3. **Teradata** views are read via `DBC.ColumnsQV` (Teradata's Query View Column Information catalog), so view L1 covers the full field set — column existence, datatype, precision, scale, length, nullability, and ordinal position — matching the table path. When `DBC.ColumnsQV` is unavailable (QVCI disabled → Teradata error 9719, missing `SELECT` grant, any other failure of that catalog query, or a degenerate result with null `DATA_TYPE`), the extractor falls back to `HELP COLUMN` with `basic_validation=True` and emits one WARNING schema row per view naming the trigger and the remediation. If HELP fails or source schema metadata still has no usable `DATA_TYPE` (including a view validated as a table whose `ColumnsV` types are null), L1 fails that object and does not continue to L2/L3. **Redshift** uses full schema metadata like tables.
|
|
@@ -182,6 +184,28 @@ Performs row-by-row comparison:
|
|
|
182
184
|
|
|
183
185
|
---
|
|
184
186
|
|
|
187
|
+
## 🐍 Python version inside SnowConvert AI
|
|
188
|
+
|
|
189
|
+
The `scai` CLI also ships this package vendored and runs it in the interpreter CSnakes downloads,
|
|
190
|
+
not the Python you `pip install` into. That interpreter is pinned by
|
|
191
|
+
`ServiceCollectionExtensions.RedistributablePython` in
|
|
192
|
+
`Snowflake.SnowConvertDesktop/Snowflake.SnowConvert.Jobs/Extensions/PythonEnvironmentExtenstion.cs`
|
|
193
|
+
(today `RedistributablePythonVersion.Python3_12`, which CSnakes.Runtime 1.2.1 resolves to CPython 3.12.9).
|
|
194
|
+
|
|
195
|
+
The `[CI][SCAI] CSnakes interpreter-pin audit` workflow (`scai-csnakes-pin-audit.yml`) fails when that
|
|
196
|
+
version does not meet the `requires-python` of this package or of the other projects vendored beside it.
|
|
197
|
+
To update the pin:
|
|
198
|
+
|
|
199
|
+
1. Change `RedistributablePython` to another `RedistributablePythonVersion` member, or bump
|
|
200
|
+
`CSnakes.Runtime` to the same version in both `Snowflake.SnowConvert.Jobs.csproj` and
|
|
201
|
+
`Snowflake.SnowConvert.Assessment.csproj`.
|
|
202
|
+
2. Run `python .github/scripts/snowconvert-ai/csnakes_pin_audit.py` (needs `dotnet` and `packaging`).
|
|
203
|
+
It prints the resolved version and every audited floor.
|
|
204
|
+
|
|
205
|
+
Raising `requires-python` here above the pinned version fails the audit until the pin moves too.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
185
209
|
## 📚 Documentation
|
|
186
210
|
|
|
187
211
|
For configuration options and examples, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
|
|
@@ -190,6 +214,46 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
190
214
|
|
|
191
215
|
## Changelog
|
|
192
216
|
|
|
217
|
+
### v1.44.0
|
|
218
|
+
|
|
219
|
+
**New features**
|
|
220
|
+
|
|
221
|
+
- Added Teradata `PERIOD` type dual-path validation helpers.
|
|
222
|
+
- Added per-column L2 metric overrides for data validation.
|
|
223
|
+
- Added column-scoped custom validation metrics model.
|
|
224
|
+
- Added Iceberg `FULL_INGEST` native temporal type migration support.
|
|
225
|
+
|
|
226
|
+
**Improvements**
|
|
227
|
+
|
|
228
|
+
- Improved trace-id correlation across SCAI and DMVF logs.
|
|
229
|
+
- Improved L2 metrics on Iceberg profiles by excluding flattened `VARCHAR` columns.
|
|
230
|
+
- Improved `TIME` type extraction to use ISO text format across all native data migration paths.
|
|
231
|
+
- Improved handling of opaque and complex types to use NULL and distinct-count checks instead of value comparison.
|
|
232
|
+
|
|
233
|
+
**Bug fixes**
|
|
234
|
+
|
|
235
|
+
- Fixed ETL compare failure when decoding the bundled datatype-normalization YAML.
|
|
236
|
+
- Fixed Oracle `XMLTYPE` hybrid L3 validation failure with `ORA-28817` in `DBMS_CRYPTO.HASH`.
|
|
237
|
+
- Fixed bare BigQuery `BIGNUMERIC` alignment with the engine `DECFLOAT` mapping.
|
|
238
|
+
- Fixed Oracle metadata templates incorrectly upper-casing quoted table and column names.
|
|
239
|
+
- Fixed `DATETIMEOFFSET` false mismatches caused by offset not being normalized to UTC.
|
|
240
|
+
- Fixed SQL Server `XML` and `IMAGE` columns failing the entire L2 metrics batch.
|
|
241
|
+
- Fixed SQL Server `TEXT` and `NTEXT` `count_distinct` producing invalid T-SQL and missing `BIN2` collation.
|
|
242
|
+
- Fixed PostgreSQL `BIT`, `BIT VARYING`, and `VARBIT` `count_distinct` failing the L2 metrics batch.
|
|
243
|
+
- Fixed DB2 `XML`, `LONG VARCHAR`, and `LONG VARGRAPHIC` falling to default `COUNT(DISTINCT)` and failing the L2 metrics batch.
|
|
244
|
+
- Fixed DB2 `BOOLEAN` metric set mismatch with Snowflake `BOOLEAN` metrics.
|
|
245
|
+
- Fixed SQL Server row validation failure on tables with an `IMAGE` column.
|
|
246
|
+
- Fixed string-length metrics producing false failures on SQL Server to Snowflake validation.
|
|
247
|
+
- Fixed SQL identifier quoting to use dialect-correct syntax across all platforms.
|
|
248
|
+
- Fixed row validation incorrectly reporting `DATA_MATCH` when the target table contains extra duplicate rows.
|
|
249
|
+
|
|
250
|
+
### v1.43.1
|
|
251
|
+
|
|
252
|
+
**Bug fixes**
|
|
253
|
+
|
|
254
|
+
- Fixed Teradata `WRITE_NOS` extract retry failing with Error 9134 (object already exists) after a session drop by clearing the landing prefix before each attempt.
|
|
255
|
+
- Fixed false `MISMATCH` results for PostgreSQL `JSON`/`JSONB` vs Snowflake `VARIANT` on key order, number spelling, and whitespace inside strings.
|
|
256
|
+
|
|
193
257
|
### v1.43.0
|
|
194
258
|
|
|
195
259
|
**New features**
|
|
@@ -71,6 +71,8 @@ Compares statistical metrics for each column:
|
|
|
71
71
|
- Null count
|
|
72
72
|
- Distinct count
|
|
73
73
|
|
|
74
|
+
For some types these metrics do not depend on the values themselves (for SQL Server: `VECTOR`, `XML`, `IMAGE`, `SQL_VARIANT`, `JSON`, `GEOGRAPHY`, `GEOMETRY`, `UNIQUEIDENTIFIER`), so a changed value can pass L2. Use L3 row validation to compare those columns' values. The per-type list is in `docs/data-migration-orchestrator/sqlserver-data-type-coverage.md` in this repo.
|
|
75
|
+
|
|
74
76
|
### Views
|
|
75
77
|
|
|
76
78
|
For **Redshift** and **Teradata** sources, views are validated on the view itself (no `CREATE TABLE AS SELECT` materialization in local sync mode). Other platforms may still materialize views to temporary tables before L1/L2/L3. **Teradata** views are read via `DBC.ColumnsQV` (Teradata's Query View Column Information catalog), so view L1 covers the full field set — column existence, datatype, precision, scale, length, nullability, and ordinal position — matching the table path. When `DBC.ColumnsQV` is unavailable (QVCI disabled → Teradata error 9719, missing `SELECT` grant, any other failure of that catalog query, or a degenerate result with null `DATA_TYPE`), the extractor falls back to `HELP COLUMN` with `basic_validation=True` and emits one WARNING schema row per view naming the trigger and the remediation. If HELP fails or source schema metadata still has no usable `DATA_TYPE` (including a view validated as a table whose `ColumnsV` types are null), L1 fails that object and does not continue to L2/L3. **Redshift** uses full schema metadata like tables.
|
|
@@ -91,6 +93,28 @@ Performs row-by-row comparison:
|
|
|
91
93
|
|
|
92
94
|
---
|
|
93
95
|
|
|
96
|
+
## 🐍 Python version inside SnowConvert AI
|
|
97
|
+
|
|
98
|
+
The `scai` CLI also ships this package vendored and runs it in the interpreter CSnakes downloads,
|
|
99
|
+
not the Python you `pip install` into. That interpreter is pinned by
|
|
100
|
+
`ServiceCollectionExtensions.RedistributablePython` in
|
|
101
|
+
`Snowflake.SnowConvertDesktop/Snowflake.SnowConvert.Jobs/Extensions/PythonEnvironmentExtenstion.cs`
|
|
102
|
+
(today `RedistributablePythonVersion.Python3_12`, which CSnakes.Runtime 1.2.1 resolves to CPython 3.12.9).
|
|
103
|
+
|
|
104
|
+
The `[CI][SCAI] CSnakes interpreter-pin audit` workflow (`scai-csnakes-pin-audit.yml`) fails when that
|
|
105
|
+
version does not meet the `requires-python` of this package or of the other projects vendored beside it.
|
|
106
|
+
To update the pin:
|
|
107
|
+
|
|
108
|
+
1. Change `RedistributablePython` to another `RedistributablePythonVersion` member, or bump
|
|
109
|
+
`CSnakes.Runtime` to the same version in both `Snowflake.SnowConvert.Jobs.csproj` and
|
|
110
|
+
`Snowflake.SnowConvert.Assessment.csproj`.
|
|
111
|
+
2. Run `python .github/scripts/snowconvert-ai/csnakes_pin_audit.py` (needs `dotnet` and `packaging`).
|
|
112
|
+
It prints the resolved version and every audited floor.
|
|
113
|
+
|
|
114
|
+
Raising `requires-python` here above the pinned version fails the audit until the pin moves too.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
94
118
|
## 📚 Documentation
|
|
95
119
|
|
|
96
120
|
For configuration options and examples, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
|
|
@@ -99,6 +123,46 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
99
123
|
|
|
100
124
|
## Changelog
|
|
101
125
|
|
|
126
|
+
### v1.44.0
|
|
127
|
+
|
|
128
|
+
**New features**
|
|
129
|
+
|
|
130
|
+
- Added Teradata `PERIOD` type dual-path validation helpers.
|
|
131
|
+
- Added per-column L2 metric overrides for data validation.
|
|
132
|
+
- Added column-scoped custom validation metrics model.
|
|
133
|
+
- Added Iceberg `FULL_INGEST` native temporal type migration support.
|
|
134
|
+
|
|
135
|
+
**Improvements**
|
|
136
|
+
|
|
137
|
+
- Improved trace-id correlation across SCAI and DMVF logs.
|
|
138
|
+
- Improved L2 metrics on Iceberg profiles by excluding flattened `VARCHAR` columns.
|
|
139
|
+
- Improved `TIME` type extraction to use ISO text format across all native data migration paths.
|
|
140
|
+
- Improved handling of opaque and complex types to use NULL and distinct-count checks instead of value comparison.
|
|
141
|
+
|
|
142
|
+
**Bug fixes**
|
|
143
|
+
|
|
144
|
+
- Fixed ETL compare failure when decoding the bundled datatype-normalization YAML.
|
|
145
|
+
- Fixed Oracle `XMLTYPE` hybrid L3 validation failure with `ORA-28817` in `DBMS_CRYPTO.HASH`.
|
|
146
|
+
- Fixed bare BigQuery `BIGNUMERIC` alignment with the engine `DECFLOAT` mapping.
|
|
147
|
+
- Fixed Oracle metadata templates incorrectly upper-casing quoted table and column names.
|
|
148
|
+
- Fixed `DATETIMEOFFSET` false mismatches caused by offset not being normalized to UTC.
|
|
149
|
+
- Fixed SQL Server `XML` and `IMAGE` columns failing the entire L2 metrics batch.
|
|
150
|
+
- Fixed SQL Server `TEXT` and `NTEXT` `count_distinct` producing invalid T-SQL and missing `BIN2` collation.
|
|
151
|
+
- Fixed PostgreSQL `BIT`, `BIT VARYING`, and `VARBIT` `count_distinct` failing the L2 metrics batch.
|
|
152
|
+
- Fixed DB2 `XML`, `LONG VARCHAR`, and `LONG VARGRAPHIC` falling to default `COUNT(DISTINCT)` and failing the L2 metrics batch.
|
|
153
|
+
- Fixed DB2 `BOOLEAN` metric set mismatch with Snowflake `BOOLEAN` metrics.
|
|
154
|
+
- Fixed SQL Server row validation failure on tables with an `IMAGE` column.
|
|
155
|
+
- Fixed string-length metrics producing false failures on SQL Server to Snowflake validation.
|
|
156
|
+
- Fixed SQL identifier quoting to use dialect-correct syntax across all platforms.
|
|
157
|
+
- Fixed row validation incorrectly reporting `DATA_MATCH` when the target table contains extra duplicate rows.
|
|
158
|
+
|
|
159
|
+
### v1.43.1
|
|
160
|
+
|
|
161
|
+
**Bug fixes**
|
|
162
|
+
|
|
163
|
+
- Fixed Teradata `WRITE_NOS` extract retry failing with Error 9134 (object already exists) after a session drop by clearing the landing prefix before each attempt.
|
|
164
|
+
- Fixed false `MISMATCH` results for PostgreSQL `JSON`/`JSONB` vs Snowflake `VARIANT` on key order, number spelling, and whitespace inside strings.
|
|
165
|
+
|
|
102
166
|
### v1.43.0
|
|
103
167
|
|
|
104
168
|
**New features**
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
"connectorx>=0.3.0",
|
|
36
36
|
"cryptography>=50.0.0",
|
|
37
37
|
"deepdiff>=8.0.0",
|
|
38
|
-
"snowflake-connector-python>=4.7.1",
|
|
38
|
+
"snowflake-connector-python>=4.7.1,<5",
|
|
39
39
|
"pandas>=2.2.3",
|
|
40
40
|
"polars>=1.0.0",
|
|
41
41
|
"pyarrow>=14.0.0",
|
|
@@ -105,7 +105,7 @@ db2 = [
|
|
|
105
105
|
# musllinux build, and SDV is published to public PyPI. Inside DMO/DEA the
|
|
106
106
|
# dependency is already declared, so SDV's logger tree is covered there.
|
|
107
107
|
scai = [
|
|
108
|
-
"snowflake-code-unit-registry>=0.
|
|
108
|
+
"snowflake-code-unit-registry>=0.9.0",
|
|
109
109
|
]
|
|
110
110
|
|
|
111
111
|
[project.urls]
|
|
@@ -201,7 +201,7 @@ check = [
|
|
|
201
201
|
'python -m pip install --upgrade pip -q && pip list',
|
|
202
202
|
"python -c \"import pathlib, shutil, site; roots=[pathlib.Path(p) for p in site.getsitepackages()]; stale=[r/'shared' for r in roots if (r/'shared').is_dir()]; [shutil.rmtree(p, ignore_errors=True) for p in stale]; print('removed', stale)\"",
|
|
203
203
|
'python -m pip install -U -q -e ../shared',
|
|
204
|
-
'pytest -vvv --junitxml=tests/outcome/test-results.xml --cov=. --cov-branch --cov-config=tests/.coveragerc --cov-report=xml:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.xml --cov-report=term --cov-report=html:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.html --cov-report=json:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.json tests --ignore=tests/integration',
|
|
204
|
+
'pytest -vvv --junitxml=tests/outcome/test-results.xml --cov=. --cov-branch --cov-config=tests/.coveragerc --cov-report=xml:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.xml --cov-report=term --cov-report=html:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.html --cov-report=json:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.json {args:tests --ignore=tests/integration}',
|
|
205
205
|
]
|
|
206
206
|
|
|
207
207
|
coverage = [
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
{{ qm.locking_prefix(query_modifiers) }}SELECT
|
|
3
3
|
{% for column in column_collection %}
|
|
4
4
|
{% if column.nullable %}
|
|
5
|
-
coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS
|
|
5
|
+
coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS {{ column_sql_names[column.name] }}{% if not loop.last %},{% endif %}
|
|
6
6
|
{% else %}
|
|
7
|
-
{{ datatypes_normalization_renderer_templates[column.name] }} AS
|
|
7
|
+
{{ datatypes_normalization_renderer_templates[column.name] }} AS {{ column_sql_names[column.name] }}{% if not loop.last %},{% endif %}
|
|
8
8
|
{% endif %}
|
|
9
9
|
{% endfor %}
|
|
10
10
|
{{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
|
|
11
11
|
{% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
|
|
12
12
|
{% if order_by_columns %}
|
|
13
|
-
ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c,
|
|
13
|
+
ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c, column_sql_names[c]) }}{% if not loop.last %}, {% endif %}{% endfor %}
|
|
14
14
|
{% endif %}
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
# Azure Synapse uses T-SQL syntax (subset of SQL Server):
|
|
5
5
|
# - CASE WHEN for conditional expressions (IIF unsupported in Dedicated SQL Pool)
|
|
6
6
|
# - STDEVP for population standard deviation
|
|
7
|
-
# -
|
|
8
|
-
#
|
|
7
|
+
# - LEN for the character length of every text column. DATALENGTH counts bytes, which
|
|
8
|
+
# drifts from Snowflake LENGTH under a UTF-8 collation. LEN ignores trailing spaces;
|
|
9
|
+
# the Snowflake generator pairs it with LENGTH(RTRIM()) (SNOW-4292391)
|
|
9
10
|
# - % 2097143 overflow guard for numeric aggregations (SNOW-3443973)
|
|
10
11
|
|
|
11
12
|
# ---- Numeric types ----
|
|
@@ -331,14 +332,15 @@ BIT:
|
|
|
331
332
|
# ---- Character types ----
|
|
332
333
|
|
|
333
334
|
CHAR:
|
|
335
|
+
# Characters, not bytes, as VARCHAR below (SNOW-4292391). RTRIM drops CHAR padding.
|
|
334
336
|
min:
|
|
335
|
-
metric_query: MIN(
|
|
337
|
+
metric_query: MIN(LEN(RTRIM("{{ col_name }}")))
|
|
336
338
|
metric_return_datatype: INT
|
|
337
339
|
max:
|
|
338
|
-
metric_query: MAX(
|
|
340
|
+
metric_query: MAX(LEN(RTRIM("{{ col_name }}")))
|
|
339
341
|
metric_return_datatype: INT
|
|
340
342
|
count_empty:
|
|
341
|
-
metric_query: SUM(CASE WHEN
|
|
343
|
+
metric_query: SUM(CASE WHEN LEN(RTRIM("{{ col_name }}")) = 0 THEN 1 ELSE 0 END)
|
|
342
344
|
metric_return_datatype: INT
|
|
343
345
|
count_distinct:
|
|
344
346
|
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
|
|
@@ -347,22 +349,26 @@ CHAR:
|
|
|
347
349
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
348
350
|
metric_return_datatype: INT
|
|
349
351
|
avg:
|
|
350
|
-
metric_query: AVG(CAST(
|
|
352
|
+
metric_query: AVG(CAST(LEN(RTRIM("{{ col_name }}")) AS FLOAT))
|
|
351
353
|
metric_return_datatype: FLOAT
|
|
352
354
|
metric_column_modifier: "% 2097143"
|
|
353
355
|
|
|
354
356
|
VARCHAR:
|
|
357
|
+
# Characters, trailing spaces trimmed (SNOW-4292391, as SQL Server's SNOW-4283493).
|
|
358
|
+
# DATALENGTH counted bytes, so 'É' under a UTF-8 collation was 2 against Snowflake's 1.
|
|
359
|
+
# LEN ignores trailing spaces and the Snowflake side RTRIMs, so 'abc ' is 3 and ' '
|
|
360
|
+
# is empty on both sides. count_distinct keeps trailing spaces significant.
|
|
355
361
|
min:
|
|
356
|
-
metric_query: MIN(
|
|
362
|
+
metric_query: MIN(LEN("{{ col_name }}"))
|
|
357
363
|
metric_return_datatype: INT
|
|
358
364
|
max:
|
|
359
|
-
metric_query: MAX(
|
|
365
|
+
metric_query: MAX(LEN("{{ col_name }}"))
|
|
360
366
|
metric_return_datatype: INT
|
|
361
367
|
avg:
|
|
362
|
-
metric_query: AVG(CAST(
|
|
368
|
+
metric_query: AVG(CAST(LEN("{{ col_name }}") AS FLOAT))
|
|
363
369
|
metric_return_datatype: FLOAT
|
|
364
370
|
count_empty:
|
|
365
|
-
metric_query: SUM(CASE WHEN
|
|
371
|
+
metric_query: SUM(CASE WHEN LEN("{{ col_name }}") = 0 THEN 1 ELSE 0 END)
|
|
366
372
|
metric_return_datatype: INT
|
|
367
373
|
count_distinct:
|
|
368
374
|
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}CAST('|' + "{{ col_name }}" + '|' AS VARCHAR(MAX)){{ measure_collation_suffix }})
|
|
@@ -382,7 +388,7 @@ NCHAR:
|
|
|
382
388
|
metric_query: AVG(CAST(LEN(RTRIM("{{ col_name }}")) AS FLOAT))
|
|
383
389
|
metric_return_datatype: FLOAT
|
|
384
390
|
count_empty:
|
|
385
|
-
metric_query: SUM(CASE WHEN RTRIM("{{ col_name }}") =
|
|
391
|
+
metric_query: SUM(CASE WHEN LEN(RTRIM("{{ col_name }}")) = 0 THEN 1 ELSE 0 END)
|
|
386
392
|
metric_return_datatype: INT
|
|
387
393
|
count_distinct:
|
|
388
394
|
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
|
|
@@ -392,6 +398,9 @@ NCHAR:
|
|
|
392
398
|
metric_return_datatype: INT
|
|
393
399
|
|
|
394
400
|
NVARCHAR:
|
|
401
|
+
# As VARCHAR above (SNOW-4292391). count_empty uses the same LEN, so ' ' is empty
|
|
402
|
+
# here and in Snowflake's LENGTH(RTRIM()) = 0; comparing to an empty literal matched
|
|
403
|
+
# it on this side only.
|
|
395
404
|
min:
|
|
396
405
|
metric_query: MIN(LEN("{{ col_name }}"))
|
|
397
406
|
metric_return_datatype: INT
|
|
@@ -402,7 +411,7 @@ NVARCHAR:
|
|
|
402
411
|
metric_query: AVG(CAST(LEN("{{ col_name }}") AS FLOAT))
|
|
403
412
|
metric_return_datatype: FLOAT
|
|
404
413
|
count_empty:
|
|
405
|
-
metric_query: SUM(CASE WHEN "{{ col_name }}" =
|
|
414
|
+
metric_query: SUM(CASE WHEN LEN("{{ col_name }}") = 0 THEN 1 ELSE 0 END)
|
|
406
415
|
metric_return_datatype: INT
|
|
407
416
|
count_distinct:
|
|
408
417
|
metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}CAST(N'|' + CAST("{{ col_name }}" AS NVARCHAR(MAX)) + N'|' AS NVARCHAR(MAX)){{ measure_collation_suffix }})
|
|
@@ -474,15 +483,17 @@ SMALLDATETIME:
|
|
|
474
483
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
475
484
|
metric_return_datatype: INT
|
|
476
485
|
|
|
486
|
+
# MIN/MAX in UTC: the row they return keeps its own offset, so the same instant
|
|
487
|
+
# would differ by offset. Snowflake TIMESTAMP_TZ pairs with TIMESTAMP_TZ_UTC.
|
|
477
488
|
DATETIMEOFFSET:
|
|
478
489
|
min:
|
|
479
490
|
metric_query: MIN("{{ col_name }}")
|
|
480
491
|
metric_return_datatype: DATETIMEOFFSET
|
|
481
|
-
metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000
|
|
492
|
+
metric_normalization: LEFT(FORMAT(SWITCHOFFSET({{ metric_query }}, '+00:00'), 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000+00:00'
|
|
482
493
|
max:
|
|
483
494
|
metric_query: MAX("{{ col_name }}")
|
|
484
495
|
metric_return_datatype: DATETIMEOFFSET
|
|
485
|
-
metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000
|
|
496
|
+
metric_normalization: LEFT(FORMAT(SWITCHOFFSET({{ metric_query }}, '+00:00'), 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000+00:00'
|
|
486
497
|
count_null:
|
|
487
498
|
metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
|
|
488
499
|
metric_return_datatype: INT
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Numerics and dates use native CONVERT/CAST, not FORMAT(): FORMAT runs through the .NET
|
|
2
|
+
# CLR and is the dominant per-row cost of the row hash. Each expression emits the same text
|
|
3
|
+
# FORMAT did. Style 121 always prints 7 fraction digits (126 drops a zero fraction); STUFF
|
|
4
|
+
# swaps its space for 'T'. DATETIME goes through DATETIME2(3) so its 1/300 s ticks print as
|
|
5
|
+
# the millisecond FORMAT showed. DECIMAL/NUMERIC convert at the column's own scale, then pad the
|
|
6
|
+
# text to the comparison scale; widening to DECIMAL(38, comparison_scale) can overflow valid values.
|
|
7
|
+
# The padding counts the digits CONVERT printed instead of trusting the column's type string:
|
|
8
|
+
# DMO hands a bare DECIMAL the cross-side scale (DECIMAL(18,6) -> NUMBER(20,10) arrives as
|
|
9
|
+
# DECIMAL(18, 10)), which would pad nothing. LEFT('.', s) adds the point to a scale-0 value
|
|
10
|
+
# only when s > 0; ISNULL keeps an unpaddable value as printed, and a NULL column stays NULL.
|
|
11
|
+
# Money widens only to its native precision because CONVERT(VARCHAR, money) keeps 2 dp.
|
|
12
|
+
# Azure Synapse datatype normalization templates.
|
|
13
|
+
# Each entry maps a Synapse type (uppercase) to a SQL expression that normalizes
|
|
14
|
+
# the column value to a canonical string for hashing.
|
|
15
|
+
# Use {{ col_name }} as the column placeholder; the query generator will substitute
|
|
16
|
+
# the actual quoted column name at render time.
|
|
17
|
+
#
|
|
18
|
+
# These templates MUST produce identical string representations to the Snowflake
|
|
19
|
+
# normalization templates so that MD5 hashes match during row validation.
|
|
20
|
+
# Mirrors sqlserver_datatypes_normalization_templates.yaml with IIF replaced by
|
|
21
|
+
# CASE WHEN (IIF is unsupported on Synapse Dedicated SQL Pool).
|
|
22
|
+
|
|
23
|
+
# ---- Numeric types ----
|
|
24
|
+
BIGINT: CONVERT(VARCHAR(20), "{{ col_name }}")
|
|
25
|
+
INT: CONVERT(VARCHAR(20), "{{ col_name }}")
|
|
26
|
+
SMALLINT: CONVERT(VARCHAR(20), "{{ col_name }}")
|
|
27
|
+
TINYINT: CONVERT(VARCHAR(20), "{{ col_name }}")
|
|
28
|
+
DECIMAL: CONVERT(VARCHAR(64), "{{ col_name }}") + ISNULL(CASE WHEN CHARINDEX('.', CONVERT(VARCHAR(64), "{{ col_name }}")) = 0 THEN LEFT('.', {{ numeric_scale }}) + REPLICATE('0', {{ numeric_scale }}) ELSE REPLICATE('0', {{ numeric_scale }} + CHARINDEX('.', CONVERT(VARCHAR(64), "{{ col_name }}")) - LEN(CONVERT(VARCHAR(64), "{{ col_name }}"))) END, '')
|
|
29
|
+
NUMERIC: CONVERT(VARCHAR(64), "{{ col_name }}") + ISNULL(CASE WHEN CHARINDEX('.', CONVERT(VARCHAR(64), "{{ col_name }}")) = 0 THEN LEFT('.', {{ numeric_scale }}) + REPLICATE('0', {{ numeric_scale }}) ELSE REPLICATE('0', {{ numeric_scale }} + CHARINDEX('.', CONVERT(VARCHAR(64), "{{ col_name }}")) - LEN(CONVERT(VARCHAR(64), "{{ col_name }}"))) END, '')
|
|
30
|
+
MONEY: CONVERT(VARCHAR(64), CAST("{{ col_name }}" AS DECIMAL(19, 4))) + '{{ numeric_scale_padding }}'
|
|
31
|
+
SMALLMONEY: CONVERT(VARCHAR(64), CAST("{{ col_name }}" AS DECIMAL(10, 4))) + '{{ numeric_scale_padding }}'
|
|
32
|
+
FLOAT: '{{ float_bit_shim }}'
|
|
33
|
+
REAL: '{{ float_bit_shim }}'
|
|
34
|
+
|
|
35
|
+
# ---- Boolean type ----
|
|
36
|
+
BIT: CASE WHEN "{{ col_name }}" = 1 THEN 'TRUE' WHEN "{{ col_name }}" = 0 THEN 'FALSE' END
|
|
37
|
+
|
|
38
|
+
# ---- Character types ----
|
|
39
|
+
CHAR: RTRIM("{{ col_name }}")
|
|
40
|
+
VARCHAR: '"{{ col_name }}"'
|
|
41
|
+
NCHAR: RTRIM("{{ col_name }}")
|
|
42
|
+
NVARCHAR: '"{{ col_name }}"'
|
|
43
|
+
|
|
44
|
+
# ---- Date / Time types ----
|
|
45
|
+
# DATETIME keeps 7 fractional digits + '00' pad to FF9.
|
|
46
|
+
# DATETIME2 / DATETIMEOFFSET: Snowflake TIMESTAMP_* stores microseconds. FORMAT
|
|
47
|
+
# '.fffffff' keeps the 7th digit (e.g. .999999900) while Snowflake TO_CHAR FF9
|
|
48
|
+
# emits .999999000 for the truncated mirror. Truncate to 6 fractional digits
|
|
49
|
+
# then pad '000' so hashes match ODBC/microsecond storage. LEFT keeps NULL.
|
|
50
|
+
# Use '+' (not CONCAT) so a NULL input propagates to NULL.
|
|
51
|
+
# DATENAME(TZOFFSET) emits '+HH:MM'/'-HH:MM' for every offset, including UTC.
|
|
52
|
+
DATE: CONVERT(VARCHAR(10), "{{ col_name }}", 23)
|
|
53
|
+
TIME: CONVERT(VARCHAR(8), "{{ col_name }}", 108)
|
|
54
|
+
DATETIME: STUFF(CONVERT(VARCHAR(27), CAST(CAST("{{ col_name }}" AS DATETIME2(3)) AS DATETIME2(7)), 121), 11, 1, 'T') + '00'
|
|
55
|
+
DATETIME2: LEFT(STUFF(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 11, 1, 'T'), 26) + '000'
|
|
56
|
+
SMALLDATETIME: CONVERT(VARCHAR(19), "{{ col_name }}", 126) + '.000000000'
|
|
57
|
+
DATETIMEOFFSET: LEFT(STUFF(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 11, 1, 'T'), 26) + '000' + DATENAME(TZOFFSET, "{{ col_name }}")
|
|
58
|
+
|
|
59
|
+
# ---- Binary types ----
|
|
60
|
+
BINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
|
|
61
|
+
VARBINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
|
|
62
|
+
|
|
63
|
+
# ---- Other types ----
|
|
64
|
+
# Azure Synapse dedicated SQL pool always normalizes UNIQUEIDENTIFIER hex digits
|
|
65
|
+
# to uppercase regardless of input casing. Use UPPER so the canonical string
|
|
66
|
+
# matches the DV cases and Snowflake's VARCHAR-based representation.
|
|
67
|
+
UNIQUEIDENTIFIER: UPPER(CONVERT(VARCHAR(36), "{{ col_name }}"))
|
|
68
|
+
SYSNAME: CONVERT(VARCHAR(128), "{{ col_name }}")
|
|
69
|
+
|
|
70
|
+
# ---- Default fallback ----
|
|
71
|
+
DEFAULT: CONVERT(VARCHAR(MAX), "{{ col_name }}")
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
{% import 'query_modifiers.sql.j2' as qm with context %}
|
|
2
2
|
{{ qm.locking_prefix(query_modifiers) }}SELECT
|
|
3
3
|
{% for index_column in index_column_collection %}
|
|
4
|
-
{{
|
|
4
|
+
{{ index_sql_aliases[index_column.name] }} AS {{ column_sql_names[index_column.name] }},
|
|
5
5
|
{% endfor %}
|
|
6
6
|
UPPER(CONVERT(VARCHAR(32), HASHBYTES('MD5',
|
|
7
7
|
{% if use_column_groups %}
|
|
8
8
|
{% for group in column_groups %}
|
|
9
9
|
{% if not loop.first %} + {% endif %}
|
|
10
10
|
UPPER(CONVERT(VARCHAR(32), HASHBYTES('MD5', CAST(CONCAT(CAST('' AS VARCHAR(MAX)){{ row_hash_collation_suffix }},
|
|
11
|
-
{% for col in group %}{{ col.name
|
|
11
|
+
{% for col in group %}{{ column_sql_names[col.name] }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}
|
|
12
12
|
) AS VARCHAR(MAX))), 2))
|
|
13
13
|
{% endfor %}
|
|
14
14
|
{% elif column_collection|length > 1 %}
|
|
15
|
-
CAST(CONCAT(CAST('' AS VARCHAR(MAX)){{ row_hash_collation_suffix }}, {% for column in column_collection %}{{ column.name
|
|
15
|
+
CAST(CONCAT(CAST('' AS VARCHAR(MAX)){{ row_hash_collation_suffix }}, {% for column in column_collection %}{{ column_sql_names[column.name] }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}) AS VARCHAR(MAX))
|
|
16
16
|
{% else %}
|
|
17
|
-
CAST({{ column_collection[0].name
|
|
17
|
+
CAST({{ column_sql_names[column_collection[0].name] }}{{ row_hash_collation_suffix }} AS VARCHAR(MAX))
|
|
18
18
|
{% endif %}
|
|
19
19
|
), 2)) AS ROW_MD5
|
|
20
20
|
FROM
|
|
21
21
|
(SELECT{{ qm.render_select_modifier(query_modifiers, 'src') }}
|
|
22
22
|
{% for index_column in index_column_collection %}
|
|
23
|
-
{{ datatypes_normalization_renderer_templates[index_column.name] }} AS {{
|
|
23
|
+
{{ datatypes_normalization_renderer_templates[index_column.name] }} AS {{ index_sql_aliases[index_column.name] }},
|
|
24
24
|
{% endfor %}
|
|
25
25
|
{% for column in column_collection %}
|
|
26
26
|
{% if column.nullable %}
|
|
27
|
-
coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS {{ column.name
|
|
27
|
+
coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS {{ column_sql_names[column.name] }}{% if not loop.last %},{% endif %}
|
|
28
28
|
{% else %}
|
|
29
|
-
{{ datatypes_normalization_renderer_templates[column.name] }} AS {{ column.name
|
|
29
|
+
{{ datatypes_normalization_renderer_templates[column.name] }} AS {{ column_sql_names[column.name] }}{% if not loop.last %},{% endif %}
|
|
30
30
|
{% endif %}
|
|
31
31
|
{% endfor %}
|
|
32
32
|
{{ qm.render_from_clause(query_modifiers, fully_qualified_name, 'src') }}
|
|
@@ -34,5 +34,5 @@ FROM
|
|
|
34
34
|
) AS RW
|
|
35
35
|
{% if order_by_columns %}
|
|
36
36
|
{# T-SQL does not support the NULLS FIRST keyword; under ASC it already sorts NULLs first, matching NULL_KEY (sentinel sorts first) in the streaming merge-join. #}
|
|
37
|
-
ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c,
|
|
37
|
+
ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c, index_sql_aliases[c]) }}{% if not loop.last %}, {% endif %}{% endfor %}
|
|
38
38
|
{% endif %}
|
|
@@ -17,6 +17,19 @@ WITH rc_cte AS (
|
|
|
17
17
|
C.NUMERIC_SCALE AS NUMERIC_SCALE,
|
|
18
18
|
C.COLLATION_NAME AS COLLATION_NAME,
|
|
19
19
|
C.IS_NULLABLE AS IS_NULLABLE,
|
|
20
|
+
(
|
|
21
|
+
SELECT CASE TABLE_TYPE
|
|
22
|
+
WHEN 'BASE TABLE' THEN 'TABLE'
|
|
23
|
+
WHEN 'VIEW' THEN 'VIEW'
|
|
24
|
+
ELSE 'UNKNOWN'
|
|
25
|
+
END
|
|
26
|
+
FROM {% if object_database_ref %}{{ object_database_ref }}.{% endif %}INFORMATION_SCHEMA.TABLES
|
|
27
|
+
WHERE TABLE_NAME = '{{ object_name | escape_sql_literal }}'
|
|
28
|
+
AND TABLE_SCHEMA = '{{ object_schema | escape_sql_literal }}'
|
|
29
|
+
{% if object_database %}
|
|
30
|
+
AND TABLE_CATALOG = '{{ object_database | escape_sql_literal }}'
|
|
31
|
+
{% endif %}
|
|
32
|
+
) AS OBJECT_TYPE,
|
|
20
33
|
rc.ROW_COUNT
|
|
21
34
|
FROM {% if object_database_ref %}{{ object_database_ref }}.{% endif %}INFORMATION_SCHEMA.COLUMNS C
|
|
22
35
|
CROSS JOIN rc_cte rc
|
|
@@ -32,6 +32,8 @@ import logging
|
|
|
32
32
|
|
|
33
33
|
from typing import TYPE_CHECKING
|
|
34
34
|
|
|
35
|
+
from shared.identifiers.managers import identifier_manager
|
|
36
|
+
from shared.identifiers.sql_identifier import SqlIdentifier
|
|
35
37
|
from snowflake.snowflake_data_validation.query.float_bit_normalization import (
|
|
36
38
|
build_binary64_canonical_expr,
|
|
37
39
|
)
|
|
@@ -50,6 +52,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
50
52
|
)
|
|
51
53
|
from snowflake.snowflake_data_validation.utils.measure_collation import (
|
|
52
54
|
TSQL_ROW_HASH_COLLATION_SUFFIX,
|
|
55
|
+
tsql_comparison_collation_tokens,
|
|
53
56
|
tsql_measure_collation_tokens,
|
|
54
57
|
)
|
|
55
58
|
from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
|
|
@@ -93,17 +96,20 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
93
96
|
)
|
|
94
97
|
|
|
95
98
|
def _comparison_collation_tokens(self, column) -> tuple[str, str]:
|
|
96
|
-
return
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
)
|
|
99
|
+
return tsql_comparison_collation_tokens(Platform.AZURE_SYNAPSE, column)
|
|
100
|
+
|
|
101
|
+
def _write_sql_identifier(self, identifier: str) -> str:
|
|
102
|
+
"""Write a column name as Azure Synapse's identifier manager does: bracketed, valid whatever QUOTED_IDENTIFIER is."""
|
|
103
|
+
return identifier_manager(self.platform).write_sql_name(SqlIdentifier(identifier))
|
|
101
104
|
|
|
102
105
|
def _float_column_reference(self, column) -> str:
|
|
103
106
|
return self._write_sql_identifier(column.name)
|
|
104
107
|
|
|
105
|
-
def
|
|
106
|
-
return
|
|
108
|
+
def _render_normalization_template_identifier(self, template: str, identifier: str) -> str:
|
|
109
|
+
return self._render_written_identifier_template(template, identifier)
|
|
110
|
+
|
|
111
|
+
def _render_metric_template_identifier(self, metric_template: str, identifier: str) -> str:
|
|
112
|
+
return self._render_written_identifier_template(metric_template, identifier)
|
|
107
113
|
|
|
108
114
|
def build_float_bit_shim(self, column, col_ref: str) -> str:
|
|
109
115
|
value_expr = float_bit_input_expr(
|
|
@@ -235,6 +241,7 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
235
241
|
),
|
|
236
242
|
row_hash_collation_suffix=TSQL_ROW_HASH_COLLATION_SUFFIX,
|
|
237
243
|
query_modifiers=resolve_table_context_modifiers(table_context),
|
|
244
|
+
write_identifier=self._write_sql_identifier,
|
|
238
245
|
)
|
|
239
246
|
|
|
240
247
|
def generate_cell_validation_data_query(
|
|
@@ -266,6 +273,7 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
|
|
|
266
273
|
order_by_columns=order_by_columns,
|
|
267
274
|
order_by_collation_expressions=self._order_by_collation_expressions(table_context.columns_to_validate),
|
|
268
275
|
query_modifiers=resolve_table_context_modifiers(table_context),
|
|
276
|
+
write_identifier=self._write_sql_identifier,
|
|
269
277
|
)
|
|
270
278
|
|
|
271
279
|
def generate_extract_md5_rows_chunk_query(self, chunk_id: str, table_context: TableContext) -> str:
|
|
@@ -44,8 +44,10 @@ FLOAT: '{{ float_bit_shim }}'
|
|
|
44
44
|
# NUMERIC/BIGNUMERIC map to Snowflake NUMBER, which renders scale-aware via
|
|
45
45
|
# TO_CHAR(col, 'FM...0.00..0'). BigQuery mirrors that scale with the resolved
|
|
46
46
|
# printf mask ``{{ numeric_format_mask }}`` (e.g. NUMBER(38,9) -> '%.9f'), so a
|
|
47
|
-
# bounded BIGNUMERIC(p, s) that fits NUMBER hashes identically.
|
|
48
|
-
# BIGNUMERIC
|
|
47
|
+
# bounded BIGNUMERIC(p, s) that fits NUMBER hashes identically. A bare
|
|
48
|
+
# BIGNUMERIC is created as DECFLOAT (SnowConvert engine parity); precision
|
|
49
|
+
# above 38 or scale above 37 reports as an L1 WARNING rather than a schema
|
|
50
|
+
# failure, and L2/L3 are not expected to reach parity on the extreme form.
|
|
49
51
|
NUMERIC: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
|
|
50
52
|
DECIMAL: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
|
|
51
53
|
BIGNUMERIC: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
|
|
@@ -41,5 +41,5 @@ SELECT
|
|
|
41
41
|
END AS scale,
|
|
42
42
|
c.collation_name AS collation_name,
|
|
43
43
|
-1 AS calculated_column_size_in_bytes
|
|
44
|
-
FROM
|
|
44
|
+
FROM {{ database_sql }}.{{ schema_sql }}.INFORMATION_SCHEMA.COLUMNS c
|
|
45
45
|
WHERE c.table_name = '{{ table_name | escape_sql_literal }}';
|
|
@@ -45,8 +45,17 @@ WITH rc_cte AS (
|
|
|
45
45
|
END AS NUMERIC_SCALE,
|
|
46
46
|
c.is_nullable AS IS_NULLABLE,
|
|
47
47
|
c.collation_name AS COLLATION_NAME,
|
|
48
|
+
(
|
|
49
|
+
SELECT CASE table_type
|
|
50
|
+
WHEN 'BASE TABLE' THEN 'TABLE'
|
|
51
|
+
WHEN 'VIEW' THEN 'VIEW'
|
|
52
|
+
ELSE 'UNKNOWN'
|
|
53
|
+
END
|
|
54
|
+
FROM {{ object_database_sql }}.{{ object_schema_sql }}.INFORMATION_SCHEMA.TABLES
|
|
55
|
+
WHERE table_name = '{{ object_name | escape_sql_literal }}'
|
|
56
|
+
) AS OBJECT_TYPE,
|
|
48
57
|
rc.ROW_COUNT
|
|
49
|
-
FROM
|
|
58
|
+
FROM {{ object_database_sql }}.{{ object_schema_sql }}.INFORMATION_SCHEMA.COLUMNS c
|
|
50
59
|
CROSS JOIN rc_cte rc
|
|
51
60
|
WHERE c.table_name = '{{ object_name | escape_sql_literal }}'
|
|
52
61
|
{% if columns %}
|
|
@@ -6,6 +6,7 @@ from snowflake.snowflake_data_validation.configuration.model.configuration_model
|
|
|
6
6
|
ConfigurationModel,
|
|
7
7
|
)
|
|
8
8
|
from snowflake.snowflake_data_validation.configuration.singleton import Singleton
|
|
9
|
+
from snowflake.snowflake_data_validation.utils.helpers.helper_io import HelperIO
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class ConfigurationLoader(metaclass=Singleton):
|
|
@@ -38,18 +39,17 @@ class ConfigurationLoader(metaclass=Singleton):
|
|
|
38
39
|
raise ValueError("The configuration file path cannot be None value")
|
|
39
40
|
|
|
40
41
|
if not (file_path.suffix == ".yaml" or file_path.suffix == ".yml"):
|
|
41
|
-
raise Exception(
|
|
42
|
-
"The configuration file must have a .yaml or .yml extension"
|
|
43
|
-
)
|
|
42
|
+
raise Exception("The configuration file must have a .yaml or .yml extension")
|
|
44
43
|
|
|
45
44
|
if not file_path.exists():
|
|
46
45
|
raise FileNotFoundError(f"Configuration file not found in {file_path}")
|
|
47
46
|
|
|
47
|
+
# Outside the try: the encoding error is already actionable and must not
|
|
48
|
+
# be flattened into the generic "error occurred" wrapper below.
|
|
49
|
+
file_content = HelperIO.read_text_file(file_path)
|
|
50
|
+
|
|
48
51
|
try:
|
|
49
|
-
|
|
50
|
-
self.configuration_model = parse_yaml_raw_as(
|
|
51
|
-
ConfigurationModel, file_content
|
|
52
|
-
)
|
|
52
|
+
self.configuration_model = parse_yaml_raw_as(ConfigurationModel, file_content)
|
|
53
53
|
|
|
54
54
|
except Exception as exception:
|
|
55
55
|
error_msg = "An error occurred while loading the configuration file:"
|