snowflake-data-validation 1.3.6__tar.gz → 1.3.7__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.
Files changed (351) hide show
  1. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/.gitignore +7 -0
  2. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/PKG-INFO +2 -1
  3. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/pyproject.toml +1 -0
  4. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/__version__.py +1 -1
  5. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +5 -6
  6. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +5 -0
  7. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/connector/connector_base.py +1 -0
  8. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +31 -7
  9. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +29 -0
  10. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +14 -3
  11. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +9 -0
  12. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -26
  13. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +14 -2
  14. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/__init__.py +10 -0
  15. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +287 -0
  16. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +324 -0
  17. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +4 -0
  18. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +1 -0
  19. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/extractor/query_cte_generator.py +149 -0
  20. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +151 -0
  21. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +89 -0
  22. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +20 -0
  23. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +17 -0
  24. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +4 -3
  25. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +8 -8
  26. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +119 -0
  27. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_columns_cte_template.sql.j2 +8 -0
  28. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +7 -0
  29. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +24 -0
  30. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +15 -0
  31. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +4 -4
  32. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +1 -1
  33. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +30 -0
  34. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +18 -0
  35. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +13 -0
  36. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +18 -18
  37. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +3 -3
  38. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +1 -1
  39. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +2 -2
  40. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +10 -6
  41. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +4 -0
  42. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/teradata_cte_generator.py +2 -2
  43. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +49 -4
  44. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +16 -3
  45. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +4 -0
  46. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/constants.py +5 -0
  47. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +50 -0
  48. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/validation/result_set_validator.py → snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +159 -126
  49. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +18 -0
  50. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/validation/query_validator.py +184 -0
  51. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +180 -0
  52. snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +385 -0
  53. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/query/test_query_generator_redshift.py +3 -2
  54. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_query_generator_teradata.py +67 -0
  55. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_teradata_metrics_validation.py +5 -5
  56. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +1 -1
  57. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_cell_data_validator.py +94 -0
  58. snowflake_data_validation-1.3.7/tests/unit/test_cell_validation_query_generation.py +148 -0
  59. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_configuration_loader.py +1 -1
  60. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_data_validator.py +29 -0
  61. snowflake_data_validation-1.3.7/tests/unit/test_query_cell_level_validation.py +353 -0
  62. snowflake_data_validation-1.3.7/tests/unit/test_query_metrics_level_validation.py +377 -0
  63. snowflake_data_validation-1.3.7/tests/unit/test_query_to_dataframe.py +167 -0
  64. snowflake_data_validation-1.3.7/tests/unit/test_query_validator.py +156 -0
  65. snowflake_data_validation-1.3.7/tests/unit/test_result_set_to_dataframe.py +392 -0
  66. snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -201
  67. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/LICENSE +0 -0
  68. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/README.md +0 -0
  69. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  70. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
  71. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
  72. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/common_cli/cli_sync_validation.py +0 -0
  73. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  74. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  75. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  76. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  77. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  78. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  79. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  80. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  81. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  82. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  83. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  84. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  85. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  86. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  87. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  88. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  89. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  90. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  91. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  92. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  93. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  94. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
  95. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
  96. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  97. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  98. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  99. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  100. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  101. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  102. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  103. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  104. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  105. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  106. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  107. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  108. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  109. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  110. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  111. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  112. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  113. /snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml → /snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  114. /snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_columns_cte_template.sql.j2 → /snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/extractor/templates/query_columns_cte_template.sql.j2 +0 -0
  115. /snowflake_data_validation-1.3.6/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml → /snowflake_data_validation-1.3.7/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  116. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  117. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  118. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  119. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  120. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/redshift_cte_generator.py +0 -0
  121. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  122. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  123. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  124. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunks_md5_table_template.sql.j2 +0 -0
  125. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  126. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_columns_cte_template.sql.j2 +0 -0
  127. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_chunks_md5_table_template.sql.j2 +0 -0
  128. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  129. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  130. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_insert_chunk_row_md5_template.sql.j2 +0 -0
  131. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  132. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  133. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  134. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  135. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  136. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  137. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
  138. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  139. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +0 -0
  140. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  141. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  142. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/result_set/extractor/result_set_cte_generator.py +0 -0
  143. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  144. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  145. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  146. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  147. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  148. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  149. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  150. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  151. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/snowflake_cte_generator.py +0 -0
  152. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  153. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunks_md5_table_template.sql.j2 +0 -0
  154. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
  155. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_columns_cte_template.sql.j2 +0 -0
  156. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_chunks_md5_table_template.sql.j2 +0 -0
  157. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  158. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  159. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  160. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_insert_chunk_row_md5_template.sql.j2 +0 -0
  161. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  162. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  163. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  164. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  165. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  166. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  167. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  168. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  169. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  170. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  171. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  172. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  173. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
  174. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  175. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  176. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  177. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  178. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  179. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/sqlserver_cte_generator.py +0 -0
  180. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_chunks_md5_table_template.sql.j2 +0 -0
  181. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  182. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_columns_cte_template.sql.j2 +0 -0
  183. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  184. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  185. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_chunks_md5_table_template.sql.j2 +0 -0
  186. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  187. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  188. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  189. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  190. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  191. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  192. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  193. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  194. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  195. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  196. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
  197. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  198. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  199. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  200. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +0 -0
  201. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  202. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  203. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  204. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  205. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  206. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  207. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  208. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_chunks_md5_table_template.sql.j2 +0 -0
  209. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_columns_cte_template.sql.j2 +0 -0
  210. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  211. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_chunks_md5_table_template.sql.j2 +0 -0
  212. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  213. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  214. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  215. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  216. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  217. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  218. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  219. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  220. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  221. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +0 -0
  222. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  223. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  224. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  225. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  226. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  227. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  228. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  229. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  230. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  231. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  232. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  233. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  234. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  235. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  236. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  237. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  238. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  239. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  240. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  241. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  242. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  243. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  244. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  245. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
  246. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  247. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  248. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  249. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  250. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  251. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  252. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  253. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  254. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  255. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  256. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
  257. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  258. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  259. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  260. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  261. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  262. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  263. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  264. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  265. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  266. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/.coveragerc +0 -0
  267. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/.coveragerc +0 -0
  268. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  269. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_async_generation_integration.py +0 -0
  270. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_async_validation_integration.py +0 -0
  271. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_reference_integration.py +0 -0
  272. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_source_validation_integration.py +0 -0
  273. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/integration/test_sync_validation_integration.py +0 -0
  274. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
  275. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_generate_validation_scripts.py +0 -0
  276. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_get_configuration_files.py +0 -0
  277. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_run_async_validation.py +0 -0
  278. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
  279. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/cli/test_redshift_cli_run_validation_ipc.py +0 -0
  280. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  281. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  282. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  283. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  284. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/test_redshift_cte_generator.py +0 -0
  285. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Redshift/test_redshift_metrics_templates.py +0 -0
  286. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  287. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  288. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/Teradata/test_teradata_cli.py +0 -0
  289. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/__init__.py +0 -0
  290. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  291. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  292. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  293. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  294. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  295. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  296. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  297. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  298. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  299. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  300. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  301. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  302. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  303. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  304. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_arguments_manager_base.py +0 -0
  305. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_arguments_manager_factory.py +0 -0
  306. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_column_metadata.py +0 -0
  307. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_column_partitioning_strategy.py +0 -0
  308. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_comparison_orchestrator.py +0 -0
  309. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_configuration_file_editor.py +0 -0
  310. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  311. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_configuration_model.py +0 -0
  312. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_connection_pool.py +0 -0
  313. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_connector_failure_tracker.py +0 -0
  314. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_connector_snowflake.py +0 -0
  315. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_console_progress_reporter.py +0 -0
  316. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_cpu_optimizer.py +0 -0
  317. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_escape_odbc_value.py +0 -0
  318. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_executor_factory.py +0 -0
  319. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_get_configuration_file.py +0 -0
  320. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_helper_dataframe.py +0 -0
  321. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_helpers.py +0 -0
  322. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_html_report_builder.py +0 -0
  323. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_logging_config.py +0 -0
  324. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_metrics_templates.py +0 -0
  325. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_report_metadata.py +0 -0
  326. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  327. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  328. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_row_data_validator.py +0 -0
  329. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_row_partitioning_strategy.py +0 -0
  330. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_row_validation_report_buffer.py +0 -0
  331. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  332. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_snowflake_cli.py +0 -0
  333. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_source_validation_executor.py +0 -0
  334. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_sqlite_validation_connection.py +0 -0
  335. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  336. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_sqlserver_cli.py +0 -0
  337. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  338. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_table_column_metadata_model.py +0 -0
  339. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_table_configuration.py +0 -0
  340. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_table_context.py +0 -0
  341. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_table_metadata_processor.py +0 -0
  342. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_telemetry.py +0 -0
  343. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_templates_loader_manager.py +0 -0
  344. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_configuration.py +0 -0
  345. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_database_connection.py +0 -0
  346. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_execution_context.py +0 -0
  347. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_progress_reporter.py +0 -0
  348. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_validation_report_buffer.py +0 -0
  349. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/test_view_configuration.py +0 -0
  350. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/utils/__init__.py +0 -0
  351. {snowflake_data_validation-1.3.6 → snowflake_data_validation-1.3.7}/tests/unit/utils/test_constants.py +0 -0
@@ -195,6 +195,12 @@ cython_debug/
195
195
  # Requirements file generated by pip-compile
196
196
  requirements.txt
197
197
 
198
+ # Streamlit in Snowflake: baked metadata (generated at deploy; not committed)
199
+ data-migration-orchestrator/src/data_migration_orchestrator/data_migration_cloud/dashboard/_streamlit_baked_metadata.py
200
+ data-migration-orchestrator/src/data_migration_orchestrator/data_validation_cloud/dashboard/_streamlit_baked_metadata.py
201
+ data-migration-orchestrator/src/data_migration_orchestrator/data_migration_cloud/dashboard/sis_streamlit_metadata.py
202
+ data-migration-orchestrator/src/data_migration_orchestrator/data_validation_cloud/dashboard/sis_streamlit_metadata.py
203
+
198
204
  # Data Exchange Agent
199
205
  data-exchange-agent/src/mocked_api/*
200
206
  .vscode
@@ -208,3 +214,4 @@ e2e-tests/config.yaml
208
214
 
209
215
  # Temporary files
210
216
  temp/
217
+ .worktrees/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-data-validation
3
- Version: 1.3.6
3
+ Version: 1.3.7
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/
@@ -26,6 +26,7 @@ Classifier: Topic :: Software Development :: Libraries
26
26
  Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
27
27
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
28
  Requires-Python: >=3.10
29
+ Requires-Dist: connectorx>=0.3.0
29
30
  Requires-Dist: cryptography>=3.4.0
30
31
  Requires-Dist: deepdiff>=8.0.0
31
32
  Requires-Dist: jinja2>=3.1.6
@@ -26,6 +26,7 @@ classifiers = [
26
26
  "Topic :: Scientific/Engineering :: Information Analysis",
27
27
  ]
28
28
  dependencies = [
29
+ "connectorx>=0.3.0",
29
30
  "cryptography>=3.4.0",
30
31
  "deepdiff>=8.0.0",
31
32
  "snowflake-connector-python>=4.0.0",
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
- __version__ = "1.3.6"
16
+ __version__ = "1.3.7"
@@ -84,7 +84,7 @@ class ConfigurationModel(BaseModel):
84
84
  def check_tables(self) -> None:
85
85
  table: TableConfiguration
86
86
  for table in self.tables:
87
- if self.source_platform.lower() == Platform.TERADATA.value:
87
+ if self.source_platform.casefold() == Platform.TERADATA.value.casefold():
88
88
  self._add_database(object=table)
89
89
  self._apply_mappings_to_table(table)
90
90
  self._check_max_failed_rows_number(table)
@@ -95,7 +95,7 @@ class ConfigurationModel(BaseModel):
95
95
  def check_views(self) -> None:
96
96
  view: ViewConfiguration
97
97
  for view in self.views:
98
- if self.source_platform.lower() == Platform.TERADATA.value:
98
+ if self.source_platform.casefold() == Platform.TERADATA.value.casefold():
99
99
  self._add_database(object=view)
100
100
  self._apply_mappings_to_view(view)
101
101
  self._check_max_failed_rows_number(view)
@@ -153,10 +153,9 @@ class ConfigurationModel(BaseModel):
153
153
  view._load_target_fully_qualified_name()
154
154
 
155
155
  # Set internal identifiers for SQL Server platform to handle special identifier formatting.
156
- if self.source_platform.casefold() == Platform.SQLSERVER.value.casefold():
157
- view._set_internal_identifiers(
158
- source_platform=Platform.SQLSERVER,
159
- )
156
+ view._set_internal_identifiers(
157
+ source_platform=Platform(self.source_platform.lower())
158
+ )
160
159
 
161
160
  def _check_max_failed_rows_number(self, table: TableConfiguration) -> None:
162
161
  if table.max_failed_rows_number is None:
@@ -49,6 +49,10 @@ class ViewConfiguration(TableConfiguration):
49
49
  self.internal_source_table = self.source_table
50
50
  self.internal_target_name = self.target_name
51
51
 
52
+ # Skip internal identifiers generation for Teradata views, because temporary table is not necessary.
53
+ if source_platform == Platform.TERADATA:
54
+ return
55
+
52
56
  # Apply quoting if original identifier was non-regular
53
57
  source_needs_quotes = HelperDatabase.is_delimited_identifier(self.source_table)
54
58
  target_needs_quotes = HelperDatabase.is_delimited_identifier(self.target_name)
@@ -89,6 +93,7 @@ class ViewConfiguration(TableConfiguration):
89
93
  self.internal_fully_qualified_name = (
90
94
  f"{self.source_database}.{self.source_schema}.{self.internal_source_table}"
91
95
  )
96
+
92
97
  self.internal_target_fully_qualified_name = (
93
98
  f"{self.target_database}.{self.target_schema}.{self.internal_target_name}"
94
99
  )
@@ -42,6 +42,7 @@ class ConnectorBase(ABC):
42
42
  self.output_path = output_path
43
43
  self.logger = logging.getLogger(__name__)
44
44
  self._failure_tracker = ConnectionFailureTracker()
45
+ self._direct_read_uri: str | None = None
45
46
 
46
47
  @abstractmethod
47
48
  def connect(
@@ -47,6 +47,8 @@ from snowflake.snowflake_data_validation.utils.base_output_handler import (
47
47
  from snowflake.snowflake_data_validation.utils.constants import (
48
48
  CHUNK_ID_COLUMN_KEY,
49
49
  DEFAULT_TOLERANCE,
50
+ ObjectType,
51
+ Platform,
50
52
  Result,
51
53
  ValidationLevel,
52
54
  )
@@ -122,6 +124,16 @@ class SyncValidationExecutor(BaseValidationExecutor):
122
124
  result_processor=self.source_extractor.process_schema_query_result,
123
125
  )
124
126
 
127
+ # Teradata view validation does not need view materialization.
128
+ if (
129
+ source_table_context.object_type == ObjectType.VIEW
130
+ and self.context.source_platform == Platform.TERADATA
131
+ ):
132
+ source_result = data_validation_api.normalize_table_metadata(
133
+ platform=self.context.source_platform,
134
+ metadata=source_result,
135
+ )
136
+
125
137
  self._emit_extraction_message(target_table_context)
126
138
  target_result = data_validation_api.execute_query(
127
139
  table_context=target_table_context,
@@ -130,13 +142,25 @@ class SyncValidationExecutor(BaseValidationExecutor):
130
142
  result_processor=self.target_extractor.process_schema_query_result,
131
143
  )
132
144
 
133
- validation_result = data_validation_api.validate_schema(
134
- source_query_result=source_result,
135
- target_query_result=target_result,
136
- table_context=source_table_context,
137
- column_mappings=column_mappings,
138
- datatypes_mappings=self.context.datatypes_mappings,
139
- )
145
+ if (
146
+ source_table_context.object_type == ObjectType.VIEW
147
+ and self.context.source_platform == Platform.TERADATA
148
+ ):
149
+ validation_result = data_validation_api.validate_schema_simple(
150
+ source_query_result=source_result,
151
+ target_query_result=target_result,
152
+ table_context=source_table_context,
153
+ column_mappings=column_mappings,
154
+ datatypes_mappings=self.context.datatypes_mappings,
155
+ )
156
+ else:
157
+ validation_result = data_validation_api.validate_schema(
158
+ source_query_result=source_result,
159
+ target_query_result=target_result,
160
+ table_context=source_table_context,
161
+ column_mappings=column_mappings,
162
+ datatypes_mappings=self.context.datatypes_mappings,
163
+ )
140
164
 
141
165
  self._emit_validation_result_message(
142
166
  validation_type=ValidationLevel.SCHEMA_VALIDATION.value,
@@ -489,6 +489,35 @@ class SQLQueriesTemplateGenerator:
489
489
  except Exception as e:
490
490
  raise Exception(f"Error generating template: {e}") from e
491
491
 
492
+ def generate_cell_validation_data_select_query(
493
+ self,
494
+ platform: str,
495
+ column_collection: list,
496
+ datatypes_normalization_renderer_templates: dict[str, str],
497
+ fully_qualified_name: str,
498
+ has_where_clause: bool,
499
+ where_clause: str,
500
+ order_by_columns: list[str] | None,
501
+ ) -> str:
502
+ """Render a SELECT that applies the same per-type normalization as L3 MD5."""
503
+ template_file = f"{platform}_cell_validation_data_select.sql.j2"
504
+ try:
505
+ template = self.env.get_template(template_file)
506
+ return template.render(
507
+ column_collection=column_collection,
508
+ datatypes_normalization_renderer_templates=datatypes_normalization_renderer_templates,
509
+ fully_qualified_name=fully_qualified_name,
510
+ has_where_clause=has_where_clause,
511
+ where_clause=where_clause,
512
+ order_by_columns=order_by_columns or [],
513
+ )
514
+ except jinja2.exceptions.TemplateNotFound:
515
+ raise ValueError(
516
+ f"Template not found: {template_file}. Please create it in the {self.template_dir} directory."
517
+ ) from None
518
+ except Exception as e:
519
+ raise Exception(f"Error generating template: {e}") from e
520
+
492
521
  # SNOWFLAKE ONLY
493
522
  def generate_chunk_row_md5_template_query(
494
523
  self,
@@ -306,7 +306,11 @@ class ParallelExecutionEngine:
306
306
  db_manager=db_manager,
307
307
  )
308
308
 
309
- if table_configuration.object_type == ObjectType.VIEW:
309
+ is_view = table_configuration.object_type == ObjectType.VIEW
310
+ is_dialect_teradata = context.source_platform == Platform.TERADATA
311
+
312
+ # Materialize source view if needed (Teradata views don't require materialization)
313
+ if is_view and not is_dialect_teradata:
310
314
  self.view_pre_processor.materialize_source_view(
311
315
  view_configuration=table_configuration,
312
316
  source_extractor=source_extractor,
@@ -378,10 +382,17 @@ class ParallelExecutionEngine:
378
382
  db_manager=db_manager,
379
383
  )
380
384
 
381
- if table_configuration.object_type == ObjectType.VIEW:
382
- self.view_pre_processor.create_temporary_table_from_view(
385
+ is_view = table_configuration.object_type == ObjectType.VIEW
386
+ is_dialect_teradata = context.source_platform == Platform.TERADATA
387
+
388
+ if is_view and not is_dialect_teradata:
389
+ self.view_pre_processor.materialize_source_view(
383
390
  view_configuration=table_configuration,
384
391
  source_extractor=source_extractor,
392
+ context=context,
393
+ )
394
+ self.view_pre_processor.materialize_target_view(
395
+ view_configuration=table_configuration,
385
396
  target_extractor=target_extractor,
386
397
  context=context,
387
398
  )
@@ -177,6 +177,15 @@ class TableMetadataProcessor:
177
177
  )
178
178
  )
179
179
 
180
+ column_metadata_result = data_validation_api.normalize_table_column_metadata(
181
+ platform=context.source_platform,
182
+ database=table_configuration.source_database,
183
+ schema=table_configuration.source_schema,
184
+ table=table_configuration.source_table,
185
+ object_type=table_configuration.object_type,
186
+ metadata=column_metadata_result,
187
+ )
188
+
180
189
  row_count_query = data_validation_api.generate_row_count_query(
181
190
  fully_qualified_name=table_configuration.fully_qualified_name,
182
191
  where_clause=table_configuration.where_clause,
@@ -28,32 +28,6 @@ class ViewPreProcessor:
28
28
  queries to script files for later reference.
29
29
  """
30
30
 
31
- def create_temporary_table_from_view(
32
- self,
33
- view_configuration: ViewConfiguration,
34
- source_extractor: MetadataExtractorBase | ScriptWriterBase,
35
- target_extractor: MetadataExtractorBase | ScriptWriterBase,
36
- context: Context,
37
- ) -> None:
38
- """Create temporary tables from views for both source and target platforms.
39
-
40
- Uses the public workflow API to generate and execute view materialization
41
- queries in a decoupled manner. For async mode, also writes the queries to
42
- script files.
43
-
44
- Args:
45
- view_configuration: Configuration object containing view details and settings.
46
- source_extractor: Extractor or script writer for the source platform.
47
- target_extractor: Extractor or script writer for the target platform.
48
- context: Context object containing platform and execution details.
49
-
50
- Returns:
51
- None
52
-
53
- """
54
- self.materialize_source_view(view_configuration, source_extractor, context)
55
- self.materialize_target_view(view_configuration, target_extractor, context)
56
-
57
31
  def materialize_source_view(
58
32
  self,
59
33
  view_configuration: ViewConfiguration,
@@ -88,9 +88,21 @@ The cell validation provides a lightweight alternative to MD5-based row validati
88
88
 
89
89
  | Function | Purpose |
90
90
  |----------|---------|
91
- | `result_set_cell_level_validation()` | Compares two `ResultSet` objects and determines if they are equivalent |
91
+ | `result_set_to_dataframe()` | Converts a `ResultSet` object to a Polars DataFrame |
92
+ | `result_set_cell_level_validation()` | Compares two `ResultSet` objects at the cell level and determines if they are equivalent |
93
+ | `result_set_metrics_level_validation()` | Compares two `ResultSet` objects at the metrics level (min, max, count, etc.) |
92
94
 
93
- This function compares the dataframes of two result sets, checking for equivalence in terms of data values (ignoring order and duplicates).
95
+ These functions compare result sets for equivalence. Cell-level validation checks individual cell values while metrics-level validation compares aggregate statistics.
96
+
97
+ ### Step 3.2.2: Query Comparison
98
+
99
+ | Function | Purpose |
100
+ |----------|---------|
101
+ | `query_to_dataframe()` | Executes a query and converts the result to a Polars DataFrame |
102
+ | `query_cell_level_validation()` | Compares two Polars DataFrames at the cell level |
103
+ | `query_metrics_level_validation()` | Compares two Polars DataFrames at the metrics level with configurable tolerance |
104
+
105
+ These functions provide direct DataFrame comparison capabilities without requiring `ResultSet` objects. They are useful for comparing query results from different sources.
94
106
 
95
107
  ### Step 3.3: Snapshot Validation
96
108
 
@@ -48,6 +48,7 @@ from snowflake.snowflake_data_validation.public.data_validation_api import (
48
48
  execute_view_materialization,
49
49
  extract_row_count,
50
50
  generate_case_sensitive_columns_query,
51
+ generate_cell_validation_data_query,
51
52
  generate_column_metadata_query,
52
53
  generate_compute_md5_queries,
53
54
  generate_create_md5_table_statement,
@@ -63,8 +64,12 @@ from snowflake.snowflake_data_validation.public.data_validation_api import (
63
64
  load_validation_results,
64
65
  process_table_column_metadata,
65
66
  process_target_table_column_metadata_from_source_table,
67
+ query_cell_level_validation,
68
+ query_metrics_level_validation,
69
+ query_to_dataframe,
66
70
  result_set_cell_level_validation,
67
71
  result_set_metrics_level_validation,
72
+ result_set_to_dataframe,
68
73
  run_async_generation,
69
74
  run_async_validation,
70
75
  run_source_validation,
@@ -173,6 +178,7 @@ __all__ = [
173
178
  "execute_view_materialization",
174
179
  "extract_row_count",
175
180
  "generate_case_sensitive_columns_query",
181
+ "generate_cell_validation_data_query",
176
182
  "generate_column_metadata_query",
177
183
  "generate_compute_md5_queries",
178
184
  "generate_create_md5_table_statement",
@@ -188,8 +194,12 @@ __all__ = [
188
194
  "load_validation_results",
189
195
  "process_table_column_metadata",
190
196
  "process_target_table_column_metadata_from_source_table",
197
+ "query_cell_level_validation",
198
+ "query_metrics_level_validation",
199
+ "query_to_dataframe",
191
200
  "result_set_cell_level_validation",
192
201
  "result_set_metrics_level_validation",
202
+ "result_set_to_dataframe",
193
203
  "run_async_generation",
194
204
  "run_async_validation",
195
205
  "run_source_validation",
@@ -0,0 +1,287 @@
1
+ # Copyright 2026 Snowflake Inc.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ """Teradata-specific internal helper functions for the public API.
17
+
18
+ This module contains private utility functions that support the public API
19
+ for Teradata-specific operations, including normalization of HELP COLUMN results.
20
+
21
+ WARNING: Functions in this module are internal implementation details and
22
+ may change without notice. Do not import from this module directly.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ import pandas as pd
28
+
29
+ from snowflake.snowflake_data_validation.utils.constants import (
30
+ CALCULATED_COLUMN_SIZE_IN_BYTES_KEY,
31
+ CHARACTER_LENGTH_KEY,
32
+ COLUMN_NAME_KEY,
33
+ DATA_TYPE_KEY,
34
+ DATABASE_NAME_KEY,
35
+ IS_PRIMARY_KEY_KEY,
36
+ NULLABLE_KEY,
37
+ PRECISION_KEY,
38
+ SCALE_KEY,
39
+ SCHEMA_NAME_KEY,
40
+ TABLE_NAME_KEY,
41
+ )
42
+
43
+
44
+ TERADATA_TYPE_CODE_MAPPING = {
45
+ "A1": "ARRAY",
46
+ "AN": "MULTI-DIMENSIONAL ARRAY",
47
+ "AT": "TIME",
48
+ "BF": "BYTE",
49
+ "BO": "BLOB",
50
+ "BV": "VARBYTE",
51
+ "CF": "CHAR",
52
+ "CO": "CLOB",
53
+ "CV": "VARCHAR",
54
+ "D": "DECIMAL",
55
+ "DA": "DATE",
56
+ "DH": "INTERVAL DAY TO HOUR",
57
+ "DM": "INTERVAL DAY TO MINUTE",
58
+ "DS": "INTERVAL DAY TO SECOND",
59
+ "DY": "INTERVAL DAY",
60
+ "F": "FLOAT",
61
+ "HM": "INTERVAL HOUR TO MINUTE",
62
+ "HS": "INTERVAL HOUR TO SECOND",
63
+ "HR": "INTERVAL HOUR",
64
+ "I": "INTEGER",
65
+ "I1": "BYTEINT",
66
+ "I2": "SMALLINT",
67
+ "I8": "BIGINT",
68
+ "JN": "JSON",
69
+ "MI": "INTERVAL MINUTE",
70
+ "MO": "INTERVAL MONTH",
71
+ "MS": "INTERVAL MINUTE TO SECOND",
72
+ "N": "NUMBER",
73
+ "PD": "PERIOD(DATE)",
74
+ "PM": "PERIOD(TIMESTAMP WITH TIME ZONE)",
75
+ "PS": "PERIOD(TIMESTAMP)",
76
+ "PT": "PERIOD(TIME)",
77
+ "PZ": "PERIOD(TIME WITH TIME ZONE)",
78
+ "SC": "INTERVAL SECOND",
79
+ "SZ": "TIMESTAMP WITH TIME ZONE",
80
+ "TS": "TIMESTAMP",
81
+ "TZ": "TIME WITH TIME ZONE",
82
+ "XM": "XML",
83
+ "YM": "INTERVAL YEAR TO MONTH",
84
+ "YR": "INTERVAL YEAR",
85
+ }
86
+
87
+ TERADATA_STRING_DATA_TYPES = {
88
+ "CHAR",
89
+ "VARCHAR",
90
+ "CLOB",
91
+ "BYTE",
92
+ "VARBYTE",
93
+ "INTERVAL DAY TO HOUR",
94
+ "INTERVAL DAY TO MINUTE",
95
+ "INTERVAL DAY TO SECOND",
96
+ "INTERVAL DAY",
97
+ "INTERVAL HOUR TO MINUTE",
98
+ "INTERVAL HOUR TO SECOND",
99
+ "INTERVAL HOUR",
100
+ "INTERVAL MINUTE",
101
+ "INTERVAL MINUTE TO SECOND",
102
+ "INTERVAL SECOND",
103
+ "INTERVAL YEAR TO MONTH",
104
+ "INTERVAL YEAR",
105
+ "INTERVAL MONTH",
106
+ "PERIOD(DATE)",
107
+ "PERIOD(TIME)",
108
+ "PERIOD(TIME WITH TIME ZONE)",
109
+ "PERIOD(TIMESTAMP)",
110
+ "PERIOD(TIMESTAMP WITH TIME ZONE)",
111
+ }
112
+
113
+ TERADATA_NUMERIC_DATA_TYPES = {
114
+ "DECIMAL",
115
+ "NUMBER",
116
+ "INTEGER",
117
+ "BYTEINT",
118
+ "SMALLINT",
119
+ "BIGINT",
120
+ }
121
+
122
+ TERADATA_HELP_COLUMN_NAME = "COLUMN NAME"
123
+ TERADATA_HELP_COLUMN_TYPE = "TYPE"
124
+ TERADATA_HELP_COLUMN_NULLABLE = "NULLABLE"
125
+ TERADATA_HELP_COLUMN_MAX_LENGTH = "MAX LENGTH"
126
+ TERADATA_HELP_COLUMN_DECIMAL_TOTAL = "DECIMAL TOTAL DIGITS"
127
+ TERADATA_HELP_COLUMN_DECIMAL_FRAC = "DECIMAL FRACTIONAL DIGITS"
128
+
129
+ COLUMN_VALIDATED_KEY = "COLUMN_VALIDATED"
130
+ TERADATA_HELP_COLUMN_PRIMARY = "PRIMARY?"
131
+
132
+
133
+ def teradata_normalize_table_column_metadata(
134
+ database: str,
135
+ table: str,
136
+ metadata_df: pd.DataFrame,
137
+ ) -> pd.DataFrame:
138
+ """Normalize Teradata HELP COLUMN result into a standardized column metadata DataFrame.
139
+
140
+ This function transforms the output of Teradata's HELP COLUMN command into a
141
+ standardized DataFrame format used by the data validation framework.
142
+ Uses vectorized pandas operations for better performance.
143
+
144
+ Args:
145
+ database: The database name containing the table.
146
+ table: The table name.
147
+ metadata_df: DataFrame containing HELP COLUMN results with columns:
148
+ - Column Name: Name of the column
149
+ - Type: 2-character Teradata type code (e.g., 'CV', 'I', 'D')
150
+ - Nullable: Nullable indicator (Y/N/?/1/-)
151
+ - Max Length: Maximum length for character types
152
+ - Decimal Total Digits: Precision for numeric types
153
+ - Decimal Fractional Digits: Scale for numeric types
154
+
155
+ Returns:
156
+ pd.DataFrame: Normalized DataFrame with columns:
157
+ DATABASE_NAME, SCHEMA_NAME, TABLE_NAME, COLUMN_NAME, DATA_TYPE,
158
+ CHARACTER_LENGTH, PRECISION, SCALE, NULLABLE, IS_PRIMARY_KEY,
159
+ CALCULATED_COLUMN_SIZE_IN_BYTES
160
+
161
+ """
162
+ output_columns = [
163
+ DATABASE_NAME_KEY,
164
+ SCHEMA_NAME_KEY,
165
+ TABLE_NAME_KEY,
166
+ COLUMN_NAME_KEY,
167
+ DATA_TYPE_KEY,
168
+ CHARACTER_LENGTH_KEY,
169
+ PRECISION_KEY,
170
+ SCALE_KEY,
171
+ NULLABLE_KEY,
172
+ IS_PRIMARY_KEY_KEY,
173
+ CALCULATED_COLUMN_SIZE_IN_BYTES_KEY,
174
+ ]
175
+
176
+ if metadata_df.empty:
177
+ return pd.DataFrame(columns=output_columns)
178
+
179
+ result_df = pd.DataFrame()
180
+
181
+ result_df[COLUMN_NAME_KEY] = (
182
+ metadata_df[TERADATA_HELP_COLUMN_NAME].fillna("").astype(str).str.strip()
183
+ )
184
+
185
+ type_codes = (
186
+ metadata_df[TERADATA_HELP_COLUMN_TYPE].fillna("").astype(str).str.strip()
187
+ )
188
+ result_df[DATA_TYPE_KEY] = type_codes.map(TERADATA_TYPE_CODE_MAPPING).fillna(
189
+ type_codes
190
+ )
191
+
192
+ is_string = result_df[DATA_TYPE_KEY].isin(TERADATA_STRING_DATA_TYPES)
193
+ is_numeric = result_df[DATA_TYPE_KEY].isin(TERADATA_NUMERIC_DATA_TYPES)
194
+
195
+ max_length = pd.to_numeric(
196
+ metadata_df[TERADATA_HELP_COLUMN_MAX_LENGTH], errors="coerce"
197
+ ).fillna(0)
198
+ result_df[CHARACTER_LENGTH_KEY] = "0"
199
+ result_df.loc[is_string, CHARACTER_LENGTH_KEY] = (
200
+ max_length[is_string].astype(int).astype(str)
201
+ )
202
+
203
+ decimal_total = pd.to_numeric(
204
+ metadata_df[TERADATA_HELP_COLUMN_DECIMAL_TOTAL], errors="coerce"
205
+ ).fillna(-128)
206
+ decimal_frac = pd.to_numeric(
207
+ metadata_df[TERADATA_HELP_COLUMN_DECIMAL_FRAC], errors="coerce"
208
+ ).fillna(-128)
209
+
210
+ result_df[PRECISION_KEY] = "-1"
211
+ valid_precision = is_numeric & (decimal_total != -128)
212
+ result_df.loc[valid_precision, PRECISION_KEY] = (
213
+ decimal_total[valid_precision].astype(int).astype(str)
214
+ )
215
+
216
+ result_df[SCALE_KEY] = "-1"
217
+ valid_scale = is_numeric & (decimal_frac != -128)
218
+ result_df.loc[valid_scale, SCALE_KEY] = (
219
+ decimal_frac[valid_scale].astype(int).astype(str)
220
+ )
221
+
222
+ nullable_values = (
223
+ metadata_df[TERADATA_HELP_COLUMN_NULLABLE]
224
+ .fillna("")
225
+ .astype(str)
226
+ .str.strip()
227
+ .str.upper()
228
+ )
229
+ result_df[NULLABLE_KEY] = nullable_values == "Y"
230
+
231
+ primary_values = (
232
+ metadata_df[TERADATA_HELP_COLUMN_PRIMARY]
233
+ .fillna("")
234
+ .astype(str)
235
+ .str.strip()
236
+ .str.upper()
237
+ )
238
+ result_df[IS_PRIMARY_KEY_KEY] = primary_values == "Y"
239
+
240
+ result_df[CALCULATED_COLUMN_SIZE_IN_BYTES_KEY] = "0"
241
+ result_df.loc[is_string, CALCULATED_COLUMN_SIZE_IN_BYTES_KEY] = (
242
+ max_length[is_string].astype(int).astype(str)
243
+ )
244
+
245
+ result_df[DATABASE_NAME_KEY] = database
246
+ result_df[SCHEMA_NAME_KEY] = database
247
+ result_df[TABLE_NAME_KEY] = table
248
+
249
+ return result_df[output_columns]
250
+
251
+
252
+ def teradata_normalize_table_metadata(
253
+ metadata_df: pd.DataFrame,
254
+ ) -> pd.DataFrame:
255
+ """Normalize Teradata HELP COLUMN result into minimal table metadata format.
256
+
257
+ This function transforms the output of Teradata's HELP COLUMN command into a
258
+ minimal DataFrame format used for simple schema validation.
259
+ Uses vectorized pandas operations for better performance.
260
+
261
+ Args:
262
+ metadata_df: DataFrame containing HELP COLUMN results.
263
+
264
+ Returns:
265
+ pd.DataFrame: Normalized DataFrame with columns:
266
+ COLUMN_VALIDATED, DATA_TYPE
267
+
268
+ """
269
+ output_columns = [COLUMN_VALIDATED_KEY, DATA_TYPE_KEY]
270
+
271
+ if metadata_df.empty:
272
+ return pd.DataFrame(columns=output_columns)
273
+
274
+ result_df = pd.DataFrame()
275
+
276
+ result_df[COLUMN_VALIDATED_KEY] = (
277
+ metadata_df[TERADATA_HELP_COLUMN_NAME].fillna("").astype(str).str.strip()
278
+ )
279
+
280
+ type_codes = (
281
+ metadata_df[TERADATA_HELP_COLUMN_TYPE].fillna("").astype(str).str.strip()
282
+ )
283
+ result_df[DATA_TYPE_KEY] = type_codes.map(TERADATA_TYPE_CODE_MAPPING).fillna(
284
+ type_codes
285
+ )
286
+
287
+ return result_df[output_columns]