snowflake-data-validation 1.46.2__tar.gz → 1.47.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.46.2 → snowflake_data_validation-1.47.0}/PKG-INFO +64 -3
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/README.md +61 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/pyproject.toml +10 -2
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +12 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +66 -3
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +12 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +46 -4
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +50 -16
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +5 -5
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +8 -6
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +9 -4
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/_internal.py +25 -10
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +4 -2
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +1 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +1 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +4 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +34 -3
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +5 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +19 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +1 -1
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +10 -5
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +49 -3
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +3 -1
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/constants.py +3 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +51 -1
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +2 -4
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +18 -4
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +38 -29
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +80 -30
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +283 -37
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_split_schema_query.py +17 -0
- snowflake_data_validation-1.47.0/tests/unit/Teradata/test_teradata_blob_metrics.py +97 -0
- snowflake_data_validation-1.47.0/tests/unit/Teradata/test_teradata_integer_stddev_exact.py +123 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +21 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +47 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/test_query_generator_bigquery.py +157 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_iso_normalization.py +14 -0
- snowflake_data_validation-1.47.0/tests/unit/oracle/test_oracle_xmltype.py +19 -0
- snowflake_data_validation-1.47.0/tests/unit/query/test_template_object_name_bracketing.py +188 -0
- snowflake_data_validation-1.47.0/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +119 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +5 -4
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_batched_metrics_queries.py +54 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_boolean_binary_canonical_templates.py +5 -4
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_connector_snowflake.py +52 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_data_validator.py +171 -0
- snowflake_data_validation-1.47.0/tests/unit/test_empty_query_result_columns.py +234 -0
- snowflake_data_validation-1.47.0/tests/unit/test_execute_query_internal.py +94 -0
- snowflake_data_validation-1.47.0/tests/unit/test_hatch_linter_environment.py +36 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_executor.py +8 -6
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_data_validator.py +663 -9
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_data_validator_empty_chunk.py +25 -3
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sqlserver_multi_version_support.py +1 -1
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sync_validation_executor.py +190 -17
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_context.py +53 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_telemetry.py +60 -0
- snowflake_data_validation-1.46.2/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -63
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/.gitignore +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/LICENSE +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/docs/README.md +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/normalization_render_context.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/tsql_float_bits.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_iceberg_format_version.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/metrics_exclusion.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/column_pairing.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/lossy_number_mapping.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/.coveragerc +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/conftest.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/.coveragerc +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_async_generation_integration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_async_validation_integration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_reference_integration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_source_validation_integration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_sync_validation_integration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_enum_metadata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_collation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_columns_metadata_template.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_collation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_table_metadata_float_precision.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_table_metadata_object_type.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_unicode_character_length.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/conftest.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_query_generator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_registration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_xml_long_metrics.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_query_generator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/query/test_normalization_render_context.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/query/test_time_fraction_rendering.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/snowflake/test_snowflake_get_iceberg_format_version.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_l1_character_maximum_length.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_accepted_transformation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_arguments_manager_base.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_arguments_manager_factory.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_case_sensitive_column_pairing.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_catalog_column_size.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_cell_data_validator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_cell_data_validator_threading.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_cell_validation_query_generation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_charset_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_grouping.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_metadata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_normalization_override.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_selection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_selection_actual_names.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_comparison_codec.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_comparison_orchestrator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_file_editor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_file_generator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_loader.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_model.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_connection_pool.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_connector_failure_tracker.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_cpu_optimizer.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_custom_templates_models.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_decfloat_l2_min_max.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_decimal_text_canonical.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_dv_tracing.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_error_classifier.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_escape_odbc_value.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_executor_factory.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_extraction_keeps_catalog_column_spelling.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_fetch_schema_metadata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_float_aggregate_reduction.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_float_bit_canonical.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_float_canonical_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_get_configuration_file.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_get_target_cols.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helper_dataframe.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helper_io.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helper_polars_cast.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helper_polars_cast_threading.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helpers.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_html_report_builder.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_iceberg_dv_l3_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_index_key_format.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_internal_helpers.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_interval_common.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_iso_dv_common.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_l2_collation_metadata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_l2_count_distinct_opt_in_config.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_logging_config.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_lossy_number_mapping.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metric_identifier_rendering.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_exclusion.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_reshape.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_result_shape.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_templates_casts.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_tolerance.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_normalize_shape_aware.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_object_type_criterion.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_period_common.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_platform_bridge.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_pushdown_diff_sql.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_generator_numeric_scale.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_to_dataframe.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_validator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_redshift_iceberg_timestamp_metrics.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_redshift_native_timestamptz_ltz.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_report_metadata.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_validator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_schema_accepted_native_datatypes.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_schema_column_selection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_schema_query_capability.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_shutdown_coordinator.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_signature_external_table.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_signature_row_md5_query.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_source_validation_executor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sync_schema_validation_real_callbacks.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_column_metadata_model.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_configuration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_metadata_processor.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_snapshot_generation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_snapshot_validation.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_target_platform_factory.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_templates_loader_manager.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_teradata_type_code_mapping.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_timestamp_golden_vectors.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_trace_bridge.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_configuration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_database_connection.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_execution_context.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_progress_reporter.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_report_buffer.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_report_status.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_templates_dto.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_vector_bit_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_vector_common.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_vector_normalization.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_view_configuration.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_warm_start.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/utils/__init__.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/utils/test_constants.py +0 -0
- {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.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.47.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<5
|
|
41
|
+
Requires-Dist: snowflake-connector-python<6,>=5
|
|
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.9.
|
|
82
|
+
Requires-Dist: snowflake-code-unit-registry>=0.9.15; extra == 'scai'
|
|
83
83
|
Provides-Extra: sqlite
|
|
84
84
|
Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
|
|
85
85
|
Provides-Extra: sqlserver
|
|
@@ -182,6 +182,14 @@ L1 and L2 read each column's catalog spelling rather than an upper-cased name, s
|
|
|
182
182
|
|
|
183
183
|
### Views
|
|
184
184
|
|
|
185
|
+
SQL Server and Azure Synapse source scans delimit each configured object-name part
|
|
186
|
+
through the shared identifier manager. Reserved words, dots inside quoted parts,
|
|
187
|
+
escaped closing brackets, and omitted schema segments remain valid in generated
|
|
188
|
+
SQL, including whitespace between a separator and a quoted part.
|
|
189
|
+
The platform-aware table-context configuration boundary parses T-SQL references
|
|
190
|
+
into actual name components once; repeated queries write those components without
|
|
191
|
+
reinterpreting quote characters or reparsing the original configuration.
|
|
192
|
+
|
|
185
193
|
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.
|
|
186
194
|
|
|
187
195
|
### Row Validation
|
|
@@ -190,6 +198,26 @@ Performs row-by-row comparison:
|
|
|
190
198
|
- Field-level value comparison
|
|
191
199
|
- Mismatch reporting
|
|
192
200
|
|
|
201
|
+
Row-MD5 results preserve the exact key aliases projected from actual catalog names; joins and report predicates do not uppercase or case-fold those aliases. Distinct keys such as `MixedCase` and `MIXEDCASE` keep their own values. Join alignment accepts an exact `_IDX` projection alias when the key's direct alias is absent; reports read the resulting canonical aliases directly. Each report side takes its identifier and literal rules from the same query generator. Only the generated hash alias is recognized by its dialect spelling (`row_md5` on PostgreSQL/Redshift). An index named `ROW_MD5` conflicts with that reserved result column and is rejected rather than used as a hash. Empty results retain cursor headers and complete missing join/hash columns; populated results fail explicitly for a missing key alias (including a known exclusion) or a missing row-MD5 column rather than guessing another key by casing.
|
|
202
|
+
|
|
203
|
+
For each mismatched row, the report holds a source and a target `SELECT` that find that row, and the run also saves a diff query per side. Each side's queries write names by that side's identifier rules: every part of the object name is read as that platform reads a configured name (an unquoted part folds to its storage case, a quoted part is kept) and written delimited, and every key column is written delimited too. So a SQL Server or Azure Synapse `Load.dbo.File` is queried as `[Load].[dbo].[File]`, the Snowflake target `LOAD.DBO.FILE` as `"LOAD"."DBO"."FILE"`, and a BigQuery key column as `` `Order Id` ``; a reserved word such as `File` stays valid. The report's table name and the saved query file names keep the configured name (`Load.dbo.File`). A string key is escaped by the query generator of the platform that runs that side (`escape_string_literal`). Most dialects use standard SQL and double an apostrophe. Snowflake also doubles backslashes, because it reads a backslash in a string literal as an escape, and BigQuery backslash-escapes both backslashes and apostrophes. A platform whose literals differ overrides `escape_string_literal` on its query generator.
|
|
204
|
+
|
|
205
|
+
Redshift also doubles backslashes and apostrophes. PostgreSQL's standard-SQL escaping assumes `standard_conforming_strings=on` (the server default since PostgreSQL 9.1); the connector does not set this session option. The unit tests check generated literal text for all ten engine dialects, not live database parsing.
|
|
206
|
+
|
|
207
|
+
Qualified source references retain parsed actual components until the identifier
|
|
208
|
+
manager writes SQL. At the table-context boundary, an explicitly supplied actual
|
|
209
|
+
schema fills an omitted schema position; it is not reparsed or replaced with
|
|
210
|
+
`dbo`. Without a resolved schema, valid omitted-position syntax such as
|
|
211
|
+
`tempdb..#snapshot` remains omitted. Separate internal temporary references do
|
|
212
|
+
not inherit the source table's schema. Catalog predicates likewise escape actual
|
|
213
|
+
names as string values rather than stripping literal brackets, quotes or padding.
|
|
214
|
+
|
|
215
|
+
Row-query result labels retain their exact aliases. Catalog-metadata boundaries
|
|
216
|
+
normalize only field labels (such as `DATA_TYPE` and `ROW_COUNT`) for metadata
|
|
217
|
+
consumers; actual column-name values remain unchanged, including mixed case.
|
|
218
|
+
|
|
219
|
+
A key present once on each side is a `MISMATCH` when its row MD5s differ. A NULL row MD5 on one side against a digest on the other is a difference too; NULL on both sides is a match. This is the `IS DISTINCT FROM` rule the Snowflake pushdown compare uses (`docs/common/l3-signature-pushdown-compare.md`).
|
|
220
|
+
|
|
193
221
|
---
|
|
194
222
|
|
|
195
223
|
## 📊 Reports
|
|
@@ -222,6 +250,18 @@ Raising `requires-python` here above the pinned version fails the audit until th
|
|
|
222
250
|
|
|
223
251
|
---
|
|
224
252
|
|
|
253
|
+
## 🧩 Custom result processors
|
|
254
|
+
|
|
255
|
+
`execute_query` and `execute_query_from_table_configuration` take an optional
|
|
256
|
+
`result_processor(raw_result, apply_column_validated_uppercase)` that turns the
|
|
257
|
+
connector's raw result into a DataFrame. A processor you pass is called for every
|
|
258
|
+
result, an empty one included, with the `apply_column_validated_uppercase` flag,
|
|
259
|
+
and the DataFrame it returns is the result, so the columns it gives an empty
|
|
260
|
+
frame are kept. Without one, the platform's default processor is used and an
|
|
261
|
+
empty result becomes an empty DataFrame with no columns.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
225
265
|
## 📚 Documentation
|
|
226
266
|
|
|
227
267
|
For configuration options and examples, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
|
|
@@ -230,6 +270,27 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
230
270
|
|
|
231
271
|
## Changelog
|
|
232
272
|
|
|
273
|
+
### v1.47.0
|
|
274
|
+
|
|
275
|
+
**New features**
|
|
276
|
+
|
|
277
|
+
- Added L1, L2, and L3 validation of BigQuery Iceberg tables.
|
|
278
|
+
- Added L2 and L3 comparison of Teradata `BLOB` and `CLOB` columns.
|
|
279
|
+
|
|
280
|
+
**Improvements**
|
|
281
|
+
|
|
282
|
+
- Improved Teradata L2 validation to compute the standard deviation of integer columns exactly.
|
|
283
|
+
- Updated the Snowflake connector to `snowflake-connector-python` 5.x.
|
|
284
|
+
|
|
285
|
+
**Bug fixes**
|
|
286
|
+
|
|
287
|
+
- Fixed row validation losing join keys when their casing differed or the key column was excluded.
|
|
288
|
+
- Fixed row validation of tables with duplicate keys by matching duplicate-key rows as multisets, and quoted SQL Server identifiers.
|
|
289
|
+
- Fixed custom processing being dropped when a query returned no rows.
|
|
290
|
+
- Fixed the saved row-diff SQL ending in an empty `WHERE` when every mismatched row was missing on one side.
|
|
291
|
+
- Fixed the row drill-down treating a `NULL` `ROW_MD5` on one side as equal to a digest on the other.
|
|
292
|
+
- Fixed Oracle `TIMESTAMP WITH LOCAL TIME ZONE` and `XMLTYPE` comparison by reading them as UTC text and compact `XMLSERIALIZE` text.
|
|
293
|
+
|
|
233
294
|
### v1.46.2
|
|
234
295
|
|
|
235
296
|
**Improvements**
|
|
@@ -91,6 +91,14 @@ L1 and L2 read each column's catalog spelling rather than an upper-cased name, s
|
|
|
91
91
|
|
|
92
92
|
### Views
|
|
93
93
|
|
|
94
|
+
SQL Server and Azure Synapse source scans delimit each configured object-name part
|
|
95
|
+
through the shared identifier manager. Reserved words, dots inside quoted parts,
|
|
96
|
+
escaped closing brackets, and omitted schema segments remain valid in generated
|
|
97
|
+
SQL, including whitespace between a separator and a quoted part.
|
|
98
|
+
The platform-aware table-context configuration boundary parses T-SQL references
|
|
99
|
+
into actual name components once; repeated queries write those components without
|
|
100
|
+
reinterpreting quote characters or reparsing the original configuration.
|
|
101
|
+
|
|
94
102
|
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.
|
|
95
103
|
|
|
96
104
|
### Row Validation
|
|
@@ -99,6 +107,26 @@ Performs row-by-row comparison:
|
|
|
99
107
|
- Field-level value comparison
|
|
100
108
|
- Mismatch reporting
|
|
101
109
|
|
|
110
|
+
Row-MD5 results preserve the exact key aliases projected from actual catalog names; joins and report predicates do not uppercase or case-fold those aliases. Distinct keys such as `MixedCase` and `MIXEDCASE` keep their own values. Join alignment accepts an exact `_IDX` projection alias when the key's direct alias is absent; reports read the resulting canonical aliases directly. Each report side takes its identifier and literal rules from the same query generator. Only the generated hash alias is recognized by its dialect spelling (`row_md5` on PostgreSQL/Redshift). An index named `ROW_MD5` conflicts with that reserved result column and is rejected rather than used as a hash. Empty results retain cursor headers and complete missing join/hash columns; populated results fail explicitly for a missing key alias (including a known exclusion) or a missing row-MD5 column rather than guessing another key by casing.
|
|
111
|
+
|
|
112
|
+
For each mismatched row, the report holds a source and a target `SELECT` that find that row, and the run also saves a diff query per side. Each side's queries write names by that side's identifier rules: every part of the object name is read as that platform reads a configured name (an unquoted part folds to its storage case, a quoted part is kept) and written delimited, and every key column is written delimited too. So a SQL Server or Azure Synapse `Load.dbo.File` is queried as `[Load].[dbo].[File]`, the Snowflake target `LOAD.DBO.FILE` as `"LOAD"."DBO"."FILE"`, and a BigQuery key column as `` `Order Id` ``; a reserved word such as `File` stays valid. The report's table name and the saved query file names keep the configured name (`Load.dbo.File`). A string key is escaped by the query generator of the platform that runs that side (`escape_string_literal`). Most dialects use standard SQL and double an apostrophe. Snowflake also doubles backslashes, because it reads a backslash in a string literal as an escape, and BigQuery backslash-escapes both backslashes and apostrophes. A platform whose literals differ overrides `escape_string_literal` on its query generator.
|
|
113
|
+
|
|
114
|
+
Redshift also doubles backslashes and apostrophes. PostgreSQL's standard-SQL escaping assumes `standard_conforming_strings=on` (the server default since PostgreSQL 9.1); the connector does not set this session option. The unit tests check generated literal text for all ten engine dialects, not live database parsing.
|
|
115
|
+
|
|
116
|
+
Qualified source references retain parsed actual components until the identifier
|
|
117
|
+
manager writes SQL. At the table-context boundary, an explicitly supplied actual
|
|
118
|
+
schema fills an omitted schema position; it is not reparsed or replaced with
|
|
119
|
+
`dbo`. Without a resolved schema, valid omitted-position syntax such as
|
|
120
|
+
`tempdb..#snapshot` remains omitted. Separate internal temporary references do
|
|
121
|
+
not inherit the source table's schema. Catalog predicates likewise escape actual
|
|
122
|
+
names as string values rather than stripping literal brackets, quotes or padding.
|
|
123
|
+
|
|
124
|
+
Row-query result labels retain their exact aliases. Catalog-metadata boundaries
|
|
125
|
+
normalize only field labels (such as `DATA_TYPE` and `ROW_COUNT`) for metadata
|
|
126
|
+
consumers; actual column-name values remain unchanged, including mixed case.
|
|
127
|
+
|
|
128
|
+
A key present once on each side is a `MISMATCH` when its row MD5s differ. A NULL row MD5 on one side against a digest on the other is a difference too; NULL on both sides is a match. This is the `IS DISTINCT FROM` rule the Snowflake pushdown compare uses (`docs/common/l3-signature-pushdown-compare.md`).
|
|
129
|
+
|
|
102
130
|
---
|
|
103
131
|
|
|
104
132
|
## 📊 Reports
|
|
@@ -131,6 +159,18 @@ Raising `requires-python` here above the pinned version fails the audit until th
|
|
|
131
159
|
|
|
132
160
|
---
|
|
133
161
|
|
|
162
|
+
## 🧩 Custom result processors
|
|
163
|
+
|
|
164
|
+
`execute_query` and `execute_query_from_table_configuration` take an optional
|
|
165
|
+
`result_processor(raw_result, apply_column_validated_uppercase)` that turns the
|
|
166
|
+
connector's raw result into a DataFrame. A processor you pass is called for every
|
|
167
|
+
result, an empty one included, with the `apply_column_validated_uppercase` flag,
|
|
168
|
+
and the DataFrame it returns is the result, so the columns it gives an empty
|
|
169
|
+
frame are kept. Without one, the platform's default processor is used and an
|
|
170
|
+
empty result becomes an empty DataFrame with no columns.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
134
174
|
## 📚 Documentation
|
|
135
175
|
|
|
136
176
|
For configuration options and examples, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
|
|
@@ -139,6 +179,27 @@ For configuration options and examples, see the [official documentation](https:/
|
|
|
139
179
|
|
|
140
180
|
## Changelog
|
|
141
181
|
|
|
182
|
+
### v1.47.0
|
|
183
|
+
|
|
184
|
+
**New features**
|
|
185
|
+
|
|
186
|
+
- Added L1, L2, and L3 validation of BigQuery Iceberg tables.
|
|
187
|
+
- Added L2 and L3 comparison of Teradata `BLOB` and `CLOB` columns.
|
|
188
|
+
|
|
189
|
+
**Improvements**
|
|
190
|
+
|
|
191
|
+
- Improved Teradata L2 validation to compute the standard deviation of integer columns exactly.
|
|
192
|
+
- Updated the Snowflake connector to `snowflake-connector-python` 5.x.
|
|
193
|
+
|
|
194
|
+
**Bug fixes**
|
|
195
|
+
|
|
196
|
+
- Fixed row validation losing join keys when their casing differed or the key column was excluded.
|
|
197
|
+
- Fixed row validation of tables with duplicate keys by matching duplicate-key rows as multisets, and quoted SQL Server identifiers.
|
|
198
|
+
- Fixed custom processing being dropped when a query returned no rows.
|
|
199
|
+
- Fixed the saved row-diff SQL ending in an empty `WHERE` when every mismatched row was missing on one side.
|
|
200
|
+
- Fixed the row drill-down treating a `NULL` `ROW_MD5` on one side as equal to a digest on the other.
|
|
201
|
+
- Fixed Oracle `TIMESTAMP WITH LOCAL TIME ZONE` and `XMLTYPE` comparison by reading them as UTC text and compact `XMLSERIALIZE` text.
|
|
202
|
+
|
|
142
203
|
### v1.46.2
|
|
143
204
|
|
|
144
205
|
**Improvements**
|
|
@@ -36,7 +36,7 @@ dependencies = [
|
|
|
36
36
|
"connectorx>=0.3.0",
|
|
37
37
|
"cryptography>=50.0.0",
|
|
38
38
|
"deepdiff>=8.0.0",
|
|
39
|
-
"snowflake-connector-python>=
|
|
39
|
+
"snowflake-connector-python>=5,<6",
|
|
40
40
|
"pandas>=2.2.3",
|
|
41
41
|
"polars>=1.0.0",
|
|
42
42
|
"pyarrow>=14.0.0",
|
|
@@ -106,7 +106,7 @@ db2 = [
|
|
|
106
106
|
# musllinux build, and SDV is published to public PyPI. Inside DMO/DEA the
|
|
107
107
|
# dependency is already declared, so SDV's logger tree is covered there.
|
|
108
108
|
scai = [
|
|
109
|
-
"snowflake-code-unit-registry>=0.9.
|
|
109
|
+
"snowflake-code-unit-registry>=0.9.15",
|
|
110
110
|
]
|
|
111
111
|
|
|
112
112
|
[project.urls]
|
|
@@ -192,6 +192,14 @@ exclude_lines = [
|
|
|
192
192
|
"if __name__ == .__main__.:",
|
|
193
193
|
]
|
|
194
194
|
|
|
195
|
+
# Ruff only reads the sources, so the linter needs neither the package nor its drivers.
|
|
196
|
+
[tool.hatch.envs.linter]
|
|
197
|
+
detached = true
|
|
198
|
+
installer = "uv"
|
|
199
|
+
dependencies = [
|
|
200
|
+
"ruff>=0.15",
|
|
201
|
+
]
|
|
202
|
+
|
|
195
203
|
[tool.hatch.envs.linter.scripts]
|
|
196
204
|
check = [
|
|
197
205
|
"echo 'Running linting checks...' && ruff check --config=../ruff.toml --statistics --verbose . || (echo '❌ LINTING FAILED: Please fix the above linting issues before proceeding. Use \"ruff check --config=../ruff.toml --fix .\" to auto-fix some issues, or fix them manually.' && exit 1)",
|
|
@@ -96,4 +96,16 @@ GEOGRAPHY: CASE WHEN `{{ col_name }}` IS NULL THEN NULL ELSE TRIM(REPLACE(REPLAC
|
|
|
96
96
|
INTERVAL: CAST(`{{ col_name }}` AS STRING)
|
|
97
97
|
RANGE: CAST(`{{ col_name }}` AS STRING)
|
|
98
98
|
|
|
99
|
+
# Iceberg EXPORT DATA text. Compatible clocks are the export format (no offset,
|
|
100
|
+
# six fractional digits). Native TIMESTAMP_NTZ pads those six digits to the nine
|
|
101
|
+
# Snowflake TO_CHAR prints for Iceberg v3. JSON/STRUCT/ARRAY hash TO_JSON_STRING,
|
|
102
|
+
# the same text the extract wrote, including the size guard the VARCHAR target uses.
|
|
103
|
+
TIMESTAMP_ICEBERG: FORMAT_TIMESTAMP('%Y-%m-%dT%H:%M:%E6S', `{{ col_name }}`)
|
|
104
|
+
DATETIME_ICEBERG: FORMAT_DATETIME('%Y-%m-%dT%H:%M:%E6S', `{{ col_name }}`)
|
|
105
|
+
TIME_ICEBERG: CAST(`{{ col_name }}` AS STRING)
|
|
106
|
+
TIMESTAMP_ICEBERG_NTZ: FORMAT_TIMESTAMP('%E4Y-%m-%dT%H:%M:%E6S', `{{ col_name }}`) || '000'
|
|
107
|
+
DATETIME_ICEBERG_NTZ: FORMAT_DATETIME('%E4Y-%m-%dT%H:%M:%E6S', `{{ col_name }}`) || '000'
|
|
108
|
+
BIGNUMERIC_ICEBERG: CAST(`{{ col_name }}` AS STRING)
|
|
109
|
+
JSON_ICEBERG: CASE WHEN `{{ col_name }}` IS NULL THEN NULL WHEN BYTE_LENGTH(TO_JSON_STRING(`{{ col_name }}`)) > {{ semi_structured_size_limit_bytes }} THEN '{{ semi_structured_size_excluded_sentinel }}' ELSE NULLIF(TO_JSON_STRING(`{{ col_name }}`), 'null') END
|
|
110
|
+
|
|
99
111
|
DEFAULT: CAST(`{{ col_name }}` AS STRING)
|
|
@@ -38,8 +38,15 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
|
|
|
38
38
|
from snowflake.snowflake_data_validation.utils.constants import (
|
|
39
39
|
COL_NAME_NO_QUOTES_PLACEHOLDER,
|
|
40
40
|
METRIC_COLUMN_MODIFIER_PLACEHOLDER,
|
|
41
|
+
SEMI_STRUCTURED_EXPORT_SIZE_LIMIT_BYTES,
|
|
42
|
+
SEMI_STRUCTURED_SIZE_EXCLUDED_SENTINEL,
|
|
41
43
|
Platform,
|
|
42
44
|
)
|
|
45
|
+
from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
|
|
46
|
+
ICEBERG_BIGQUERY_NUMERIC_TYPE,
|
|
47
|
+
IcebergProfile,
|
|
48
|
+
resolve_iceberg_bigquery_source_normalization_key,
|
|
49
|
+
)
|
|
43
50
|
from snowflake.snowflake_data_validation.utils.iso_dv_common import (
|
|
44
51
|
get_paired_target_column_types,
|
|
45
52
|
normalize_snowflake_base_type,
|
|
@@ -60,6 +67,7 @@ if TYPE_CHECKING: # pragma: no cover - used only for type hints.
|
|
|
60
67
|
LOGGER = logging.getLogger(__name__)
|
|
61
68
|
|
|
62
69
|
_WIDE_NUMERIC_BASE_TYPES = frozenset({BigQueryType.BIGNUMERIC, BigQueryType.BIGDECIMAL})
|
|
70
|
+
_ICEBERG_DECIMAL128_SOURCE_TYPES = frozenset({CommonType.NUMERIC, CommonType.DECIMAL})
|
|
63
71
|
# Normalization key for a BIGNUMERIC / BIGDECIMAL whose Snowflake mirror is DECFLOAT.
|
|
64
72
|
BIGNUMERIC_DECFLOAT_NORMALIZATION_KEY = "BIGNUMERIC_DECFLOAT"
|
|
65
73
|
# Normalization key for an ARRAY / STRUCT holding no NUMERIC / BIGNUMERIC, which data
|
|
@@ -100,6 +108,10 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
100
108
|
"""Initialize the BigQuery query generator."""
|
|
101
109
|
super().__init__(platform=Platform.BIGQUERY)
|
|
102
110
|
|
|
111
|
+
def escape_string_literal(self, value: str) -> str:
|
|
112
|
+
r"""Backslash-escape backslashes and quotes: BigQuery reads ``\\`` and ``\'`` in a literal, not ``''``."""
|
|
113
|
+
return value.replace("\\", "\\\\").replace("'", "\\'")
|
|
114
|
+
|
|
103
115
|
def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
|
|
104
116
|
"""Force binary DISTINCT semantics only for metadata-gated STRING columns."""
|
|
105
117
|
if (
|
|
@@ -247,7 +259,21 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
247
259
|
table_context: TableContext,
|
|
248
260
|
) -> str:
|
|
249
261
|
base_type = self.normalize_bigquery_type(column.data_type)
|
|
250
|
-
|
|
262
|
+
profile = IcebergProfile.from_table_context(table_context)
|
|
263
|
+
paired = get_paired_target_column_types(table_context).get(column.name)
|
|
264
|
+
iceberg_key = resolve_iceberg_bigquery_source_normalization_key(
|
|
265
|
+
base_type,
|
|
266
|
+
is_iceberg=profile.is_active,
|
|
267
|
+
paired_target_type=paired if isinstance(paired, str) else None,
|
|
268
|
+
)
|
|
269
|
+
if iceberg_key != base_type and not has_custom_column_normalization(
|
|
270
|
+
column.name,
|
|
271
|
+
base_type,
|
|
272
|
+
column_normalization_map=None,
|
|
273
|
+
templates_loader_manager=table_context.templates_loader_manager,
|
|
274
|
+
):
|
|
275
|
+
base_type = iceberg_key
|
|
276
|
+
elif self._lands_in_decfloat(column, table_context):
|
|
251
277
|
base_type = BIGNUMERIC_DECFLOAT_NORMALIZATION_KEY
|
|
252
278
|
elif serializes_exactly_through_to_json(column.data_type) and not has_custom_column_normalization(
|
|
253
279
|
column.name,
|
|
@@ -284,6 +310,31 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
284
310
|
return None
|
|
285
311
|
return f"NULLIF(TO_JSON_STRING(PARSE_JSON({field_wise})), 'null')"
|
|
286
312
|
|
|
313
|
+
def _iceberg_field_wise_normalization(self, column: ColumnMetadata) -> str | None:
|
|
314
|
+
"""Hash the field-wise JSON text the Iceberg extract wrote, without PARSE_JSON."""
|
|
315
|
+
column_ref = f"`{self._normalization_column_name(column)}`"
|
|
316
|
+
field_wise = field_wise_json_text(column.data_type, column_ref)
|
|
317
|
+
if field_wise is None:
|
|
318
|
+
return None
|
|
319
|
+
limit = SEMI_STRUCTURED_EXPORT_SIZE_LIMIT_BYTES
|
|
320
|
+
sentinel = SEMI_STRUCTURED_SIZE_EXCLUDED_SENTINEL
|
|
321
|
+
return (
|
|
322
|
+
f"CASE WHEN {column_ref} IS NULL THEN NULL "
|
|
323
|
+
f"WHEN BYTE_LENGTH({field_wise}) > {limit} THEN '{sentinel}' "
|
|
324
|
+
f"ELSE NULLIF({field_wise}, 'null') END"
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
def _column_with_iceberg_numeric_scale(self, column: ColumnMetadata, table_context: TableContext) -> ColumnMetadata:
|
|
328
|
+
"""Force NUMERIC/DECIMAL scale to 9 so the source mask matches NUMBER(38,9)."""
|
|
329
|
+
if self.normalize_bigquery_type(column.data_type) not in _ICEBERG_DECIMAL128_SOURCE_TYPES:
|
|
330
|
+
return column
|
|
331
|
+
paired = get_paired_target_column_types(table_context).get(column.name)
|
|
332
|
+
if not isinstance(paired, str) or normalize_snowflake_base_type(paired) != CommonType.NUMBER:
|
|
333
|
+
return column
|
|
334
|
+
rendered = column.copy()
|
|
335
|
+
rendered.data_type = ICEBERG_BIGQUERY_NUMERIC_TYPE
|
|
336
|
+
return rendered
|
|
337
|
+
|
|
287
338
|
def _column_normalization(
|
|
288
339
|
self,
|
|
289
340
|
column: ColumnMetadata,
|
|
@@ -295,10 +346,21 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
295
346
|
A user's normalization, a per-column rule or an override of the column's base type
|
|
296
347
|
(``STRUCT``, ``ARRAY``), wins over the built-in field-wise text.
|
|
297
348
|
"""
|
|
349
|
+
base_type = self.normalize_bigquery_type(column.data_type)
|
|
350
|
+
profile = IcebergProfile.from_table_context(table_context)
|
|
351
|
+
if profile.is_active:
|
|
352
|
+
iceberg_field_wise = self._iceberg_field_wise_normalization(column)
|
|
353
|
+
if iceberg_field_wise is not None and not has_custom_column_normalization(
|
|
354
|
+
column.name,
|
|
355
|
+
base_type,
|
|
356
|
+
column_normalization_map,
|
|
357
|
+
table_context.templates_loader_manager,
|
|
358
|
+
):
|
|
359
|
+
return iceberg_field_wise
|
|
298
360
|
field_wise = self._field_wise_normalization(column)
|
|
299
361
|
if field_wise is not None and not has_custom_column_normalization(
|
|
300
362
|
column.name,
|
|
301
|
-
|
|
363
|
+
base_type,
|
|
302
364
|
column_normalization_map,
|
|
303
365
|
table_context.templates_loader_manager,
|
|
304
366
|
):
|
|
@@ -315,7 +377,8 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
|
|
|
315
377
|
)
|
|
316
378
|
# Resolve ``{{ col_name }}`` and, for numeric types, the scale-aware
|
|
317
379
|
# ``{{ numeric_format_mask }}`` (BigQuery emits a printf ``%.Nf``).
|
|
318
|
-
|
|
380
|
+
rendered_column = self._column_with_iceberg_numeric_scale(column, table_context) if profile.is_active else column
|
|
381
|
+
return self._render_normalization_template(normalization_template, rendered_column)
|
|
319
382
|
|
|
320
383
|
def _build_datatypes_normalization_renderer_templates(
|
|
321
384
|
self,
|
|
@@ -14,10 +14,14 @@
|
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
17
19
|
import logging
|
|
18
20
|
import time
|
|
19
21
|
|
|
20
22
|
from abc import ABC, abstractmethod
|
|
23
|
+
from collections.abc import Callable
|
|
24
|
+
from typing import TYPE_CHECKING
|
|
21
25
|
|
|
22
26
|
from snowflake.snowflake_data_validation.connector.connector_failure_tracker import (
|
|
23
27
|
ConnectionFailureTracker,
|
|
@@ -27,6 +31,10 @@ from snowflake.snowflake_data_validation.utils.constants import (
|
|
|
27
31
|
)
|
|
28
32
|
|
|
29
33
|
|
|
34
|
+
if TYPE_CHECKING:
|
|
35
|
+
import pandas as pd
|
|
36
|
+
|
|
37
|
+
|
|
30
38
|
class ConnectorBase(ABC):
|
|
31
39
|
"""Abstract base class for database connectors."""
|
|
32
40
|
|
|
@@ -162,6 +170,10 @@ class ConnectorBase(ABC):
|
|
|
162
170
|
"""Execute a query on the database."""
|
|
163
171
|
pass
|
|
164
172
|
|
|
173
|
+
def get_result_processor(self) -> Callable[[list, bool], pd.DataFrame] | None:
|
|
174
|
+
"""Return a connector-specific normalizer, or use the platform default."""
|
|
175
|
+
return None
|
|
176
|
+
|
|
165
177
|
@abstractmethod
|
|
166
178
|
def execute_statement(self, statement: str) -> None:
|
|
167
179
|
"""Execute a statement on the database."""
|
|
@@ -27,6 +27,7 @@ public workflow API module:
|
|
|
27
27
|
"""
|
|
28
28
|
|
|
29
29
|
import hashlib
|
|
30
|
+
import logging
|
|
30
31
|
|
|
31
32
|
from collections.abc import Callable
|
|
32
33
|
from concurrent.futures import ThreadPoolExecutor
|
|
@@ -34,6 +35,7 @@ from typing import Any
|
|
|
34
35
|
|
|
35
36
|
import pandas as pd
|
|
36
37
|
|
|
38
|
+
from shared.identifiers.managers import identifier_manager
|
|
37
39
|
from snowflake.snowflake_data_validation.connector.connector_base import (
|
|
38
40
|
ConnectorBase,
|
|
39
41
|
)
|
|
@@ -80,9 +82,12 @@ from snowflake.snowflake_data_validation.utils.telemetry import (
|
|
|
80
82
|
report_telemetry,
|
|
81
83
|
)
|
|
82
84
|
from snowflake.snowflake_data_validation.validation.row_data_validator import (
|
|
85
|
+
ROW_MD5_KEY,
|
|
83
86
|
SOURCE_SUFFIX,
|
|
84
87
|
TARGET_SUFFIX,
|
|
88
|
+
MissingRowJoinColumnError,
|
|
85
89
|
RowDataValidator,
|
|
90
|
+
RowReportSide,
|
|
86
91
|
)
|
|
87
92
|
from snowflake.snowflake_data_validation.validation.validation_report_buffer import (
|
|
88
93
|
ValidationReportBuffer,
|
|
@@ -91,6 +96,23 @@ from snowflake.snowflake_data_validation.validation.validation_report_buffer imp
|
|
|
91
96
|
|
|
92
97
|
# ``execute_query``'s ``result_processor(raw_result, apply_column_validated_uppercase)``.
|
|
93
98
|
SchemaResultProcessor = Callable[[list[Any], bool], pd.DataFrame]
|
|
99
|
+
LOGGER = logging.getLogger(__name__)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _suffix_row_result(frame: pd.DataFrame, suffix: str, table_context: TableContext) -> pd.DataFrame:
|
|
103
|
+
"""Recognize the generated unquoted hash alias; preserve every actual key alias."""
|
|
104
|
+
if any(column.name == ROW_MD5_KEY for column in table_context.index_column_collection):
|
|
105
|
+
raise MissingRowJoinColumnError(f"index column {ROW_MD5_KEY} conflicts with the reserved row MD5 alias")
|
|
106
|
+
try:
|
|
107
|
+
manager = identifier_manager(table_context.platform)
|
|
108
|
+
except ValueError:
|
|
109
|
+
LOGGER.debug(f"Dialect alias rules are unavailable for {table_context.platform}; retaining the generated hash alias")
|
|
110
|
+
hash_alias = ROW_MD5_KEY
|
|
111
|
+
else:
|
|
112
|
+
hash_alias = manager.parse_identifier(ROW_MD5_KEY)
|
|
113
|
+
if hash_alias != ROW_MD5_KEY and hash_alias in frame.columns and ROW_MD5_KEY not in frame.columns:
|
|
114
|
+
frame = frame.rename(columns={hash_alias: ROW_MD5_KEY})
|
|
115
|
+
return frame.convert_dtypes().add_suffix(suffix)
|
|
94
116
|
|
|
95
117
|
|
|
96
118
|
def _ignoring_case_flag(process: Callable[[list], pd.DataFrame]) -> Callable[[list, bool], pd.DataFrame]:
|
|
@@ -441,8 +463,8 @@ class SyncValidationExecutor(BaseValidationExecutor):
|
|
|
441
463
|
|
|
442
464
|
source_index_column_collection = [column.name for column in source_table_context.index_column_collection]
|
|
443
465
|
target_index_column_collection = [column.name for column in target_table_context.index_column_collection]
|
|
444
|
-
source_index_column_suffix_collection = [col
|
|
445
|
-
target_index_column_suffix_collection = [col
|
|
466
|
+
source_index_column_suffix_collection = [col + SOURCE_SUFFIX for col in source_index_column_collection]
|
|
467
|
+
target_index_column_suffix_collection = [col + TARGET_SUFFIX for col in target_index_column_collection]
|
|
446
468
|
|
|
447
469
|
source_query = data_validation_api.generate_row_md5_select_query(
|
|
448
470
|
table_context=source_table_context,
|
|
@@ -471,8 +493,8 @@ class SyncValidationExecutor(BaseValidationExecutor):
|
|
|
471
493
|
executor.shutdown(wait=False, cancel_futures=True)
|
|
472
494
|
raise
|
|
473
495
|
|
|
474
|
-
source_md5_df = source_rows_result.dataframe
|
|
475
|
-
target_md5_df = target_rows_result.dataframe
|
|
496
|
+
source_md5_df = _suffix_row_result(source_rows_result.dataframe, SOURCE_SUFFIX, source_table_context)
|
|
497
|
+
target_md5_df = _suffix_row_result(target_rows_result.dataframe, TARGET_SUFFIX, target_table_context)
|
|
476
498
|
|
|
477
499
|
# SQLite has no native MD5: the row-md5-select query returns CONCAT_TEXT
|
|
478
500
|
# instead of ROW_MD5. Compute hashlib MD5 here so the comparison columns match.
|
|
@@ -486,12 +508,18 @@ class SyncValidationExecutor(BaseValidationExecutor):
|
|
|
486
508
|
source_transformed = QueryExecutionResult(dataframe=source_md5_df)
|
|
487
509
|
target_transformed = QueryExecutionResult(dataframe=target_md5_df)
|
|
488
510
|
|
|
511
|
+
excluded_column_names: list[str] = []
|
|
512
|
+
for side_context in (source_table_context, target_table_context):
|
|
513
|
+
if side_context.is_exclusion_mode and side_context.column_selection_list is not None:
|
|
514
|
+
excluded_column_names.extend(side_context.column_selection_list)
|
|
515
|
+
|
|
489
516
|
rows_comparison_result = data_validation_api.compare_md5_rows_chunk(
|
|
490
517
|
source_rows_result=source_transformed,
|
|
491
518
|
target_rows_result=target_transformed,
|
|
492
519
|
source_index_column_suffix_collection=source_index_column_suffix_collection,
|
|
493
520
|
target_index_column_suffix_collection=target_index_column_suffix_collection,
|
|
494
521
|
table_context=source_table_context,
|
|
522
|
+
excluded_column_names=excluded_column_names,
|
|
495
523
|
)
|
|
496
524
|
|
|
497
525
|
rows_compared_df = rows_comparison_result.results_dataframe
|
|
@@ -499,6 +527,16 @@ class SyncValidationExecutor(BaseValidationExecutor):
|
|
|
499
527
|
has_differences = len(rows_compared_df) > 0
|
|
500
528
|
|
|
501
529
|
if has_differences:
|
|
530
|
+
source_generator = self.source_extractor.query_generator
|
|
531
|
+
target_generator = self.target_extractor.query_generator
|
|
532
|
+
source_side = RowReportSide(
|
|
533
|
+
escape_literal=source_generator.escape_string_literal,
|
|
534
|
+
platform=source_generator.platform,
|
|
535
|
+
)
|
|
536
|
+
target_side = RowReportSide(
|
|
537
|
+
escape_literal=target_generator.escape_string_literal,
|
|
538
|
+
platform=target_generator.platform,
|
|
539
|
+
)
|
|
502
540
|
data_validator = RowDataValidator()
|
|
503
541
|
data_validator.generate_row_validation_report(
|
|
504
542
|
compared_df=rows_compared_df,
|
|
@@ -512,6 +550,8 @@ class SyncValidationExecutor(BaseValidationExecutor):
|
|
|
512
550
|
context=self.context,
|
|
513
551
|
db_manager=self.db_manager,
|
|
514
552
|
object_type=source_table_context.object_type,
|
|
553
|
+
source_side=source_side,
|
|
554
|
+
target_side=target_side,
|
|
515
555
|
)
|
|
516
556
|
|
|
517
557
|
data_validator.generate_row_validation_queries(
|
|
@@ -522,6 +562,8 @@ class SyncValidationExecutor(BaseValidationExecutor):
|
|
|
522
562
|
target_index_column_collection=target_index_column_collection,
|
|
523
563
|
object_id=source_table_context.id,
|
|
524
564
|
context=self.context,
|
|
565
|
+
source_side=source_side,
|
|
566
|
+
target_side=target_side,
|
|
525
567
|
)
|
|
526
568
|
|
|
527
569
|
self._register_row_validation_execution_status(
|