snowflake-data-validation 1.24.2__tar.gz → 1.25.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.
Files changed (537) hide show
  1. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/PKG-INFO +13 -1
  2. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/README.md +12 -0
  3. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/__init__.py +2 -0
  4. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/__init__.py +29 -0
  5. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +16 -0
  6. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +16 -0
  7. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +395 -0
  8. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +86 -0
  9. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +44 -0
  10. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +39 -0
  11. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +56 -0
  12. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +33 -0
  13. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +23 -0
  14. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +277 -0
  15. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +6 -6
  16. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +1 -1
  17. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +9 -9
  18. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +4 -0
  19. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +25 -0
  20. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +61 -12
  21. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +50 -0
  22. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +4 -2
  23. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +1 -1
  24. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +5 -20
  25. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +1 -1
  26. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +1 -2
  27. snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +2 -0
  28. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +7 -7
  29. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +9 -1
  30. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +4 -2
  31. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/constants.py +9 -0
  32. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +7 -4
  33. snowflake_data_validation-1.25.0/tests/unit/bigquery/__init__.py +2 -0
  34. snowflake_data_validation-1.25.0/tests/unit/bigquery/test_query_generator_bigquery.py +372 -0
  35. snowflake_data_validation-1.25.0/tests/unit/bigquery/test_query_generator_factory_bigquery.py +43 -0
  36. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_boolean_binary_canonical_templates.py +4 -3
  37. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_cell_validation_query_generation.py +15 -2
  38. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_query_generator_numeric_scale.py +8 -0
  39. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -50
  40. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/.gitignore +0 -0
  41. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/LICENSE +0 -0
  42. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/docs/README.md +0 -0
  43. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/pyproject.toml +0 -0
  44. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
  45. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  46. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  47. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_cli.py +0 -0
  48. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  49. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  50. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  51. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  52. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  53. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  54. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
  55. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
  56. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  57. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  58. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  59. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  60. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  61. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  62. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  63. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  64. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
  65. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  66. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  67. /snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 → /snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  68. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
  69. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/common_cli/cli_sync_validation.py +0 -0
  70. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  71. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  72. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  73. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  74. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  75. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  76. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  77. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  78. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  79. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  80. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  81. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  82. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  83. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  84. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  85. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  86. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  87. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  88. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  89. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  90. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  91. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  92. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  93. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  94. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  95. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
  96. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
  97. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  98. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  99. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  100. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  101. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  102. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  103. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  104. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  105. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
  106. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  107. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  108. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  109. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  110. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  111. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
  112. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  113. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  114. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  115. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  116. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  117. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  118. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  119. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  120. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  121. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  122. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  123. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  124. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  125. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  126. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  127. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  128. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  129. /snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 → /snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  130. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  131. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  132. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  133. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  134. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  135. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  136. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_cli.py +0 -0
  137. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  138. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  139. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
  140. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  141. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  142. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  143. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  144. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  145. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  146. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  147. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  148. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  149. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  150. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  151. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  152. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  153. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  154. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  155. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  156. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  157. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  158. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  159. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  160. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  161. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  162. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  163. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  164. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  165. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  166. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  167. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  168. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  169. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  170. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  171. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  172. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  173. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  174. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  175. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  176. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  177. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  178. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  179. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  180. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  181. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  182. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  183. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  184. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  185. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
  186. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  187. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  188. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  189. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  190. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  191. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  192. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  193. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  194. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  195. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  196. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  197. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  198. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  199. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  200. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  201. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  202. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  203. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  204. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  205. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  206. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  207. /snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 → /snowflake_data_validation-1.25.0/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  208. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  209. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  210. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  211. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  212. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  213. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  214. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  215. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +0 -0
  216. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  217. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  218. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  219. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  220. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  221. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  222. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  223. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  224. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  225. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  226. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  227. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  228. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  229. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  230. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  231. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  232. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
  233. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +0 -0
  234. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  235. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  236. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  237. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  238. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  239. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  240. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  241. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  242. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  243. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  244. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  245. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  246. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  247. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  248. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  249. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  250. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  251. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
  252. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  253. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  254. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  255. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  256. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  257. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  258. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  259. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  260. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  261. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  262. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  263. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  264. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  265. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  266. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  267. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  268. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  269. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  270. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  271. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  272. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  273. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  274. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  275. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  276. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  277. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  278. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  279. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  280. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  281. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  282. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  283. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  284. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  285. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  286. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  287. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  288. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  289. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  290. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  291. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  292. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  293. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  294. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  295. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
  296. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  297. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  298. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  299. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +0 -0
  300. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  301. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  302. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  303. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  304. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  305. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  306. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  307. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  308. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  309. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  310. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  311. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  312. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  313. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  314. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  315. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  316. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  317. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  318. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  319. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  320. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  321. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  322. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  323. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  324. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +0 -0
  325. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
  326. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  327. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  328. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  329. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  330. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  331. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  332. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  333. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  334. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  335. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  336. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  337. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  338. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  339. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  340. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  341. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  342. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  343. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  344. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  345. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  346. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  347. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  348. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +0 -0
  349. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  350. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  351. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  352. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  353. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  354. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  355. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
  356. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  357. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  358. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  359. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  360. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  361. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  362. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  363. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  364. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  365. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  366. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  367. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  368. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  369. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  370. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
  371. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  372. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  373. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  374. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  375. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  376. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  377. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  378. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  379. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  380. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  381. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  382. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  383. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  384. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  385. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  386. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/.coveragerc +0 -0
  387. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/conftest.py +0 -0
  388. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/integration/.coveragerc +0 -0
  389. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  390. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/integration/test_async_generation_integration.py +0 -0
  391. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/integration/test_async_validation_integration.py +0 -0
  392. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/integration/test_reference_integration.py +0 -0
  393. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/integration/test_source_validation_integration.py +0 -0
  394. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/integration/test_sync_validation_integration.py +0 -0
  395. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
  396. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/cli/test_redshift_cli_generate_validation_scripts.py +0 -0
  397. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/cli/test_redshift_cli_get_configuration_files.py +0 -0
  398. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/cli/test_redshift_cli_run_async_validation.py +0 -0
  399. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
  400. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/cli/test_redshift_cli_run_validation_ipc.py +0 -0
  401. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  402. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  403. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  404. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  405. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  406. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  407. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  408. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  409. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Teradata/test_teradata_cli.py +0 -0
  410. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  411. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/__init__.py +0 -0
  412. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  413. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  414. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  415. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  416. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  417. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  418. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  419. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  420. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  421. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  422. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  423. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  424. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  425. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  426. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  427. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/azure_synapse/__init__.py +0 -0
  428. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  429. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  430. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  431. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
  432. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
  433. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  434. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  435. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/oracle/__init__.py +0 -0
  436. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  437. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  438. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  439. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  440. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/oracle/test_oracle_query_generator.py +0 -0
  441. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  442. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  443. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/sqlite/__init__.py +0 -0
  444. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  445. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  446. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  447. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  448. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  449. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  450. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/sqlserver/__init__.py +0 -0
  451. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
  452. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_accepted_transformation.py +0 -0
  453. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_arguments_manager_base.py +0 -0
  454. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  455. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_batched_metrics_queries.py +0 -0
  456. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_cell_data_validator.py +0 -0
  457. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_charset_normalization.py +0 -0
  458. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_column_grouping.py +0 -0
  459. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_column_metadata.py +0 -0
  460. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
  461. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_comparison_codec.py +0 -0
  462. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  463. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_configuration_file_editor.py +0 -0
  464. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  465. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_configuration_loader.py +0 -0
  466. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_configuration_model.py +0 -0
  467. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_connection_pool.py +0 -0
  468. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  469. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_connector_snowflake.py +0 -0
  470. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_console_progress_reporter.py +0 -0
  471. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_cpu_optimizer.py +0 -0
  472. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_custom_templates_models.py +0 -0
  473. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_data_validator.py +0 -0
  474. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_escape_odbc_value.py +0 -0
  475. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_executor_factory.py +0 -0
  476. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_float_canonical_templates.py +0 -0
  477. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_get_configuration_file.py +0 -0
  478. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_helper_dataframe.py +0 -0
  479. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_helper_polars_cast.py +0 -0
  480. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_helpers.py +0 -0
  481. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_html_report_builder.py +0 -0
  482. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_index_key_format.py +0 -0
  483. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_internal_helpers.py +0 -0
  484. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_iso_dv_common.py +0 -0
  485. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_logging_config.py +0 -0
  486. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_metrics_reshape.py +0 -0
  487. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_metrics_result_shape.py +0 -0
  488. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_metrics_templates_casts.py +0 -0
  489. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_platform_bridge.py +0 -0
  490. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  491. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  492. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_query_cell_level_validation.py +0 -0
  493. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  494. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_query_to_dataframe.py +0 -0
  495. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_query_validator.py +0 -0
  496. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_report_metadata.py +0 -0
  497. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  498. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  499. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  500. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  501. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  502. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_result_set_validator.py +0 -0
  503. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_row_data_validator.py +0 -0
  504. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
  505. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  506. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  507. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  508. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  509. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  510. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_snowflake_cli.py +0 -0
  511. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_source_validation_executor.py +0 -0
  512. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  513. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
  514. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  515. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  516. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_sqlserver_cli.py +0 -0
  517. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  518. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_table_column_metadata_model.py +0 -0
  519. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_table_configuration.py +0 -0
  520. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_table_context.py +0 -0
  521. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_table_metadata_processor.py +0 -0
  522. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  523. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  524. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_target_platform_factory.py +0 -0
  525. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_telemetry.py +0 -0
  526. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_templates_loader_manager.py +0 -0
  527. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
  528. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_timestamp_golden_vectors.py +0 -0
  529. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_validation_configuration.py +0 -0
  530. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_validation_database_connection.py +0 -0
  531. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_validation_execution_context.py +0 -0
  532. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  533. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_validation_report_buffer.py +0 -0
  534. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_validation_report_status.py +0 -0
  535. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/test_view_configuration.py +0 -0
  536. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/utils/__init__.py +0 -0
  537. {snowflake_data_validation-1.24.2 → snowflake_data_validation-1.25.0}/tests/unit/utils/test_constants.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-data-validation
3
- Version: 1.24.2
3
+ Version: 1.25.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/
@@ -218,6 +218,18 @@ For complete command reference, configuration options, and examples, see the [Da
218
218
 
219
219
  ## Changelog
220
220
 
221
+ ### v1.25.0
222
+
223
+ **New features**
224
+
225
+ - Added automatic primary key inference for SQL Server, Teradata, and Redshift.
226
+ - Added BigQuery support for cloud Data Validation (L1/L2/L3).
227
+ - Added Redshift data type coverage for data migration and validation.
228
+
229
+ **Improvements**
230
+
231
+ - Improved numeric canonical rendering with scale-aware precision for Oracle, Teradata, Redshift, and PostgreSQL.
232
+
221
233
  ### v1.24.2
222
234
 
223
235
  **New features**
@@ -132,6 +132,18 @@ For complete command reference, configuration options, and examples, see the [Da
132
132
 
133
133
  ## Changelog
134
134
 
135
+ ### v1.25.0
136
+
137
+ **New features**
138
+
139
+ - Added automatic primary key inference for SQL Server, Teradata, and Redshift.
140
+ - Added BigQuery support for cloud Data Validation (L1/L2/L3).
141
+ - Added Redshift data type coverage for data migration and validation.
142
+
143
+ **Improvements**
144
+
145
+ - Improved numeric canonical rendering with scale-aware precision for Oracle, Teradata, Redshift, and PostgreSQL.
146
+
135
147
  ### v1.24.2
136
148
 
137
149
  **New features**
@@ -98,6 +98,7 @@ import snowflake.snowflake_data_validation.snowflake as snowflake
98
98
  import snowflake.snowflake_data_validation.sqlserver as sqlserver
99
99
  import snowflake.snowflake_data_validation.redshift as redshift
100
100
  import snowflake.snowflake_data_validation.oracle as oracle
101
+ import snowflake.snowflake_data_validation.bigquery as bigquery
101
102
  import snowflake.snowflake_data_validation.public as public
102
103
  import logging
103
104
 
@@ -119,6 +120,7 @@ __all__ = [
119
120
  "sqlserver",
120
121
  "redshift",
121
122
  "oracle",
123
+ "bigquery",
122
124
  "public",
123
125
  ]
124
126
 
@@ -0,0 +1,29 @@
1
+ # Copyright 2026 Snowflake Inc.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ """
5
+ Snowflake Data Validation BigQuery
6
+ =====================================
7
+
8
+ This package provides BigQuery-specific query generation for data validation.
9
+
10
+ BigQuery participates as a *source* platform whose row extraction is driven by
11
+ the Data Exchange Agent (DEA). The desktop package only owns the query
12
+ generator and the SQL/YAML templates required to produce parity-preserving
13
+ BigQuery SQL for L1 (schema), L2 (metrics) and L3 (row-hash) validation against
14
+ a Snowflake target. It does not open BigQuery connections itself.
15
+
16
+ Main Components
17
+ ----------------
18
+ - QueryGeneratorBigQuery: BigQuery-specific SQL generation (inline SELECT path).
19
+ - extractor/templates: BigQuery normalization, metrics and metadata templates.
20
+ """
21
+
22
+ from snowflake.snowflake_data_validation.bigquery.query.query_generator_bigquery import (
23
+ QueryGeneratorBigQuery,
24
+ )
25
+
26
+
27
+ __all__ = [
28
+ "QueryGeneratorBigQuery",
29
+ ]
@@ -0,0 +1,16 @@
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
+ """BigQuery extractor templates (normalization, metrics, metadata)."""
@@ -0,0 +1,16 @@
1
+ {% import 'query_modifiers.sql.j2' as qm with context %}
2
+ {{ qm.locking_prefix(query_modifiers) }}SELECT
3
+ {% for column in column_collection %}
4
+ {% if column.nullable %}
5
+ RTRIM(COALESCE({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}')) AS `{{ column.name }}`{% if not loop.last %},{% endif %}
6
+ {% else %}
7
+ RTRIM({{ datatypes_normalization_renderer_templates[column.name] }}) AS `{{ column.name }}`{% if not loop.last %},{% endif %}
8
+ {% endif %}
9
+ {% endfor %}
10
+ FROM (
11
+ SELECT * {{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
12
+ {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
13
+ {% if order_by_columns %}
14
+ ORDER BY {% for c in order_by_columns %} `{{ c }}`{% if not loop.last %}, {% endif %}{% endfor %}
15
+ {% endif %}
16
+ ) __ordered
@@ -0,0 +1,395 @@
1
+ # BigQuery column metrics templates (L1/L2 validation).
2
+ #
3
+ # Keys are BigQuery *base* types (parameters/parametrization stripped by
4
+ # QueryGeneratorBigQuery.normalize_bigquery_type -> _resolve_metrics_col_type).
5
+ # `{{ col_name }}` is replaced with the backtick-quoted column name at render time.
6
+ #
7
+ # Notes:
8
+ # - COUNTIF(<bool>) is used for conditional counts.
9
+ # - sum/avg/stddev cast to FLOAT64 to avoid INT64 overflow and to give a single
10
+ # stable aggregate type across INT64/NUMERIC/BIGNUMERIC. Log-scale BIGNUMERIC
11
+ # metrics are a documented follow-on (out of epic v1).
12
+ # - ARRAY/STRUCT/JSON/GEOGRAPHY/RANGE/INTERVAL are count-only: MIN/MAX/SUM and
13
+ # COUNT(DISTINCT) are not meaningful (or not allowed) for these types in BigQuery.
14
+
15
+ # ----- Integer types -----
16
+ INT64:
17
+ min:
18
+ metric_query: MIN(`{{ col_name }}`)
19
+ metric_return_datatype: INT64
20
+ max:
21
+ metric_query: MAX(`{{ col_name }}`)
22
+ metric_return_datatype: INT64
23
+ count_distinct:
24
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
25
+ metric_return_datatype: INT64
26
+ count_null:
27
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
28
+ metric_return_datatype: INT64
29
+ count_zero:
30
+ metric_query: COUNTIF(`{{ col_name }}` = 0)
31
+ metric_return_datatype: INT64
32
+ # {{ modifier }} is the overflow-guard modulo, rendered as MOD(`col`, N) by
33
+ # QueryGeneratorBigQuery so sum/avg/stddev match the Snowflake target's
34
+ # `col % N` (BigQuery GoogleSQL has no `%` operator).
35
+ avg:
36
+ metric_query: AVG(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
37
+ metric_return_datatype: FLOAT64
38
+ metric_column_modifier: "% 2097143"
39
+ sum:
40
+ metric_query: SUM(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
41
+ metric_return_datatype: FLOAT64
42
+ metric_column_modifier: "% 2097143"
43
+ stddev:
44
+ metric_query: STDDEV_POP(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
45
+ metric_return_datatype: FLOAT64
46
+ metric_column_modifier: "% 2097143"
47
+
48
+ INTEGER:
49
+ min:
50
+ metric_query: MIN(`{{ col_name }}`)
51
+ metric_return_datatype: INT64
52
+ max:
53
+ metric_query: MAX(`{{ col_name }}`)
54
+ metric_return_datatype: INT64
55
+ count_distinct:
56
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
57
+ metric_return_datatype: INT64
58
+ count_null:
59
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
60
+ metric_return_datatype: INT64
61
+ count_zero:
62
+ metric_query: COUNTIF(`{{ col_name }}` = 0)
63
+ metric_return_datatype: INT64
64
+ # {{ modifier }} is the overflow-guard modulo, rendered as MOD(`col`, N) by
65
+ # QueryGeneratorBigQuery so sum/avg/stddev match the Snowflake target's
66
+ # `col % N` (BigQuery GoogleSQL has no `%` operator).
67
+ avg:
68
+ metric_query: AVG(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
69
+ metric_return_datatype: FLOAT64
70
+ metric_column_modifier: "% 2097143"
71
+ sum:
72
+ metric_query: SUM(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
73
+ metric_return_datatype: FLOAT64
74
+ metric_column_modifier: "% 2097143"
75
+ stddev:
76
+ metric_query: STDDEV_POP(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
77
+ metric_return_datatype: FLOAT64
78
+ metric_column_modifier: "% 2097143"
79
+
80
+ # ----- Floating point -----
81
+ FLOAT64:
82
+ min:
83
+ metric_query: MIN(`{{ col_name }}`)
84
+ metric_return_datatype: FLOAT64
85
+ max:
86
+ metric_query: MAX(`{{ col_name }}`)
87
+ metric_return_datatype: FLOAT64
88
+ count_distinct:
89
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
90
+ metric_return_datatype: INT64
91
+ count_null:
92
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
93
+ metric_return_datatype: INT64
94
+ count_zero:
95
+ metric_query: COUNTIF(`{{ col_name }}` = 0)
96
+ metric_return_datatype: INT64
97
+ # {{ modifier }} is the overflow-guard modulo, rendered as MOD(<expr>, N) by
98
+ # QueryGeneratorBigQuery to match the Snowflake target's `col % N`. MOD rejects
99
+ # FLOAT64, so the column is widened to BIGNUMERIC first (see the generator).
100
+ avg:
101
+ metric_query: AVG(CAST(CAST(`{{ col_name }}` AS BIGNUMERIC){{ modifier }} AS FLOAT64))
102
+ metric_return_datatype: FLOAT64
103
+ metric_column_modifier: "% 2097143"
104
+ sum:
105
+ metric_query: SUM(CAST(CAST(`{{ col_name }}` AS BIGNUMERIC){{ modifier }} AS FLOAT64))
106
+ metric_return_datatype: FLOAT64
107
+ metric_column_modifier: "% 2097143"
108
+ stddev:
109
+ metric_query: STDDEV_POP(CAST(CAST(`{{ col_name }}` AS BIGNUMERIC){{ modifier }} AS FLOAT64))
110
+ metric_return_datatype: FLOAT64
111
+ metric_column_modifier: "% 2097143"
112
+
113
+ # ----- Decimal types -----
114
+ NUMERIC:
115
+ min:
116
+ metric_query: MIN(`{{ col_name }}`)
117
+ metric_return_datatype: NUMERIC
118
+ max:
119
+ metric_query: MAX(`{{ col_name }}`)
120
+ metric_return_datatype: NUMERIC
121
+ count_distinct:
122
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
123
+ metric_return_datatype: INT64
124
+ count_null:
125
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
126
+ metric_return_datatype: INT64
127
+ count_zero:
128
+ metric_query: COUNTIF(`{{ col_name }}` = 0)
129
+ metric_return_datatype: INT64
130
+ # {{ modifier }} is the overflow-guard modulo, rendered as MOD(`col`, N) by
131
+ # QueryGeneratorBigQuery so sum/avg/stddev match the Snowflake target's
132
+ # `col % N` (BigQuery GoogleSQL has no `%` operator).
133
+ avg:
134
+ metric_query: AVG(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
135
+ metric_return_datatype: FLOAT64
136
+ metric_column_modifier: "% 2097143"
137
+ sum:
138
+ metric_query: SUM(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
139
+ metric_return_datatype: FLOAT64
140
+ metric_column_modifier: "% 2097143"
141
+ stddev:
142
+ metric_query: STDDEV_POP(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
143
+ metric_return_datatype: FLOAT64
144
+ metric_column_modifier: "% 2097143"
145
+
146
+ DECIMAL:
147
+ min:
148
+ metric_query: MIN(`{{ col_name }}`)
149
+ metric_return_datatype: NUMERIC
150
+ max:
151
+ metric_query: MAX(`{{ col_name }}`)
152
+ metric_return_datatype: NUMERIC
153
+ count_distinct:
154
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
155
+ metric_return_datatype: INT64
156
+ count_null:
157
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
158
+ metric_return_datatype: INT64
159
+ count_zero:
160
+ metric_query: COUNTIF(`{{ col_name }}` = 0)
161
+ metric_return_datatype: INT64
162
+ # {{ modifier }} is the overflow-guard modulo, rendered as MOD(`col`, N) by
163
+ # QueryGeneratorBigQuery so sum/avg/stddev match the Snowflake target's
164
+ # `col % N` (BigQuery GoogleSQL has no `%` operator).
165
+ avg:
166
+ metric_query: AVG(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
167
+ metric_return_datatype: FLOAT64
168
+ metric_column_modifier: "% 2097143"
169
+ sum:
170
+ metric_query: SUM(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
171
+ metric_return_datatype: FLOAT64
172
+ metric_column_modifier: "% 2097143"
173
+ stddev:
174
+ metric_query: STDDEV_POP(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
175
+ metric_return_datatype: FLOAT64
176
+ metric_column_modifier: "% 2097143"
177
+
178
+ BIGNUMERIC:
179
+ min:
180
+ metric_query: MIN(`{{ col_name }}`)
181
+ metric_return_datatype: BIGNUMERIC
182
+ max:
183
+ metric_query: MAX(`{{ col_name }}`)
184
+ metric_return_datatype: BIGNUMERIC
185
+ count_distinct:
186
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
187
+ metric_return_datatype: INT64
188
+ count_null:
189
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
190
+ metric_return_datatype: INT64
191
+ count_zero:
192
+ metric_query: COUNTIF(`{{ col_name }}` = 0)
193
+ metric_return_datatype: INT64
194
+ # {{ modifier }} is the overflow-guard modulo, rendered as MOD(`col`, N) by
195
+ # QueryGeneratorBigQuery so sum/avg/stddev match the Snowflake target's
196
+ # `col % N` (BigQuery GoogleSQL has no `%` operator).
197
+ avg:
198
+ metric_query: AVG(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
199
+ metric_return_datatype: FLOAT64
200
+ metric_column_modifier: "% 2097143"
201
+ sum:
202
+ metric_query: SUM(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
203
+ metric_return_datatype: FLOAT64
204
+ metric_column_modifier: "% 2097143"
205
+ stddev:
206
+ metric_query: STDDEV_POP(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
207
+ metric_return_datatype: FLOAT64
208
+ metric_column_modifier: "% 2097143"
209
+
210
+ BIGDECIMAL:
211
+ min:
212
+ metric_query: MIN(`{{ col_name }}`)
213
+ metric_return_datatype: BIGNUMERIC
214
+ max:
215
+ metric_query: MAX(`{{ col_name }}`)
216
+ metric_return_datatype: BIGNUMERIC
217
+ count_distinct:
218
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
219
+ metric_return_datatype: INT64
220
+ count_null:
221
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
222
+ metric_return_datatype: INT64
223
+ count_zero:
224
+ metric_query: COUNTIF(`{{ col_name }}` = 0)
225
+ metric_return_datatype: INT64
226
+ # {{ modifier }} is the overflow-guard modulo, rendered as MOD(`col`, N) by
227
+ # QueryGeneratorBigQuery so sum/avg/stddev match the Snowflake target's
228
+ # `col % N` (BigQuery GoogleSQL has no `%` operator).
229
+ avg:
230
+ metric_query: AVG(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
231
+ metric_return_datatype: FLOAT64
232
+ metric_column_modifier: "% 2097143"
233
+ sum:
234
+ metric_query: SUM(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
235
+ metric_return_datatype: FLOAT64
236
+ metric_column_modifier: "% 2097143"
237
+ stddev:
238
+ metric_query: STDDEV_POP(CAST(`{{ col_name }}`{{ modifier }} AS FLOAT64))
239
+ metric_return_datatype: FLOAT64
240
+ metric_column_modifier: "% 2097143"
241
+
242
+ # ----- Boolean -----
243
+ BOOL:
244
+ count_true:
245
+ metric_query: COUNTIF(`{{ col_name }}` IS TRUE)
246
+ metric_return_datatype: INT64
247
+ count_false:
248
+ metric_query: COUNTIF(`{{ col_name }}` IS FALSE)
249
+ metric_return_datatype: INT64
250
+ count_null:
251
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
252
+ metric_return_datatype: INT64
253
+
254
+ BOOLEAN:
255
+ count_true:
256
+ metric_query: COUNTIF(`{{ col_name }}` IS TRUE)
257
+ metric_return_datatype: INT64
258
+ count_false:
259
+ metric_query: COUNTIF(`{{ col_name }}` IS FALSE)
260
+ metric_return_datatype: INT64
261
+ count_null:
262
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
263
+ metric_return_datatype: INT64
264
+
265
+ # ----- String -----
266
+ STRING:
267
+ min:
268
+ metric_query: MIN(LENGTH(`{{ col_name }}`))
269
+ metric_return_datatype: INT64
270
+ max:
271
+ metric_query: MAX(LENGTH(`{{ col_name }}`))
272
+ metric_return_datatype: INT64
273
+ avg:
274
+ metric_query: AVG(CAST(LENGTH(`{{ col_name }}`) AS FLOAT64))
275
+ metric_return_datatype: FLOAT64
276
+ count_empty:
277
+ metric_query: COUNTIF(`{{ col_name }}` = '')
278
+ metric_return_datatype: INT64
279
+ count_distinct:
280
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
281
+ metric_return_datatype: INT64
282
+ count_null:
283
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
284
+ metric_return_datatype: INT64
285
+
286
+ # ----- Bytes -----
287
+ BYTES:
288
+ min:
289
+ metric_query: MIN(BYTE_LENGTH(`{{ col_name }}`))
290
+ metric_return_datatype: INT64
291
+ max:
292
+ metric_query: MAX(BYTE_LENGTH(`{{ col_name }}`))
293
+ metric_return_datatype: INT64
294
+ count_distinct:
295
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
296
+ metric_return_datatype: INT64
297
+ count_null:
298
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
299
+ metric_return_datatype: INT64
300
+
301
+ # ----- Date and time -----
302
+ DATE:
303
+ min:
304
+ metric_query: MIN(`{{ col_name }}`)
305
+ metric_return_datatype: DATE
306
+ max:
307
+ metric_query: MAX(`{{ col_name }}`)
308
+ metric_return_datatype: DATE
309
+ count_null:
310
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
311
+ metric_return_datatype: INT64
312
+
313
+ TIME:
314
+ min:
315
+ metric_query: MIN(`{{ col_name }}`)
316
+ metric_return_datatype: TIME
317
+ max:
318
+ metric_query: MAX(`{{ col_name }}`)
319
+ metric_return_datatype: TIME
320
+ count_null:
321
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
322
+ metric_return_datatype: INT64
323
+
324
+ # DATETIME maps to Snowflake TIMESTAMP_NTZ, whose min/max metric canonical is
325
+ # TO_CHAR(x, 'YYYY-MM-DD"T"HH24:MI:SS.FF9'). Emit the SAME canonical text (T
326
+ # separator, 9 fractional digits, no zone) so L2 min/max strings match the
327
+ # target byte-for-byte; without this BigQuery returns "YYYY-MM-DD HH:MM:SS" with
328
+ # microsecond precision and the comparison fails.
329
+ DATETIME:
330
+ min:
331
+ metric_query: MIN(`{{ col_name }}`)
332
+ metric_return_datatype: DATETIME
333
+ metric_normalization: FORMAT_DATETIME('%E4Y-%m-%dT%H:%M:%E9S', {{ metric_query }})
334
+ max:
335
+ metric_query: MAX(`{{ col_name }}`)
336
+ metric_return_datatype: DATETIME
337
+ metric_normalization: FORMAT_DATETIME('%E4Y-%m-%dT%H:%M:%E9S', {{ metric_query }})
338
+ count_null:
339
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
340
+ metric_return_datatype: INT64
341
+
342
+ # TIMESTAMP maps to Snowflake TIMESTAMP_TZ, whose min/max metric canonical ends
343
+ # in the "+00:00" UTC offset. Mirror the L3 row-hash format (%Ez over UTC) so the
344
+ # L2 min/max strings match the target byte-for-byte.
345
+ TIMESTAMP:
346
+ min:
347
+ metric_query: MIN(`{{ col_name }}`)
348
+ metric_return_datatype: TIMESTAMP
349
+ metric_normalization: FORMAT_TIMESTAMP('%E4Y-%m-%dT%H:%M:%E9S%Ez', {{ metric_query }}, 'UTC')
350
+ max:
351
+ metric_query: MAX(`{{ col_name }}`)
352
+ metric_return_datatype: TIMESTAMP
353
+ metric_normalization: FORMAT_TIMESTAMP('%E4Y-%m-%dT%H:%M:%E9S%Ez', {{ metric_query }}, 'UTC')
354
+ count_null:
355
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
356
+ metric_return_datatype: INT64
357
+
358
+ # ----- Complex / semi-structured (count-only) -----
359
+ ARRAY:
360
+ count_null:
361
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
362
+ metric_return_datatype: INT64
363
+
364
+ STRUCT:
365
+ count_null:
366
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
367
+ metric_return_datatype: INT64
368
+
369
+ JSON:
370
+ count_null:
371
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
372
+ metric_return_datatype: INT64
373
+
374
+ GEOGRAPHY:
375
+ count_null:
376
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
377
+ metric_return_datatype: INT64
378
+
379
+ INTERVAL:
380
+ count_null:
381
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
382
+ metric_return_datatype: INT64
383
+
384
+ RANGE:
385
+ count_null:
386
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
387
+ metric_return_datatype: INT64
388
+
389
+ DEFAULT:
390
+ count_distinct:
391
+ metric_query: COUNT(DISTINCT `{{ col_name }}`)
392
+ metric_return_datatype: INT64
393
+ count_null:
394
+ metric_query: COUNTIF(`{{ col_name }}` IS NULL)
395
+ metric_return_datatype: INT64
@@ -0,0 +1,86 @@
1
+ # BigQuery datatype normalization templates (L3 row-hash + cell validation).
2
+ #
3
+ # Each expression must produce the SAME canonical text as the Snowflake target
4
+ # normalization for identical values, so that UPPER(TO_HEX(MD5(...))) on the
5
+ # BigQuery source equals UPPER(MD5(...)) on the Snowflake target.
6
+ #
7
+ # Keys are BigQuery *base* types (parameters/parametrization stripped by
8
+ # QueryGeneratorBigQuery.normalize_bigquery_type). `{{ col_name }}` is replaced
9
+ # with the (backtick-quoted) column name at render time.
10
+ #
11
+ # Canonical formats (mirroring snowflake_datatypes_normalization_templates.yaml):
12
+ # number -> fixed 4 decimals, no leading zero for |value| < 1
13
+ # date -> YYYY-MM-DD
14
+ # time -> HH:MM:SS
15
+ # datetime -> YYYY-MM-DDTHH:MM:SS.fffffffff (9 fractional digits)
16
+ # timestamp-> YYYY-MM-DDTHH:MM:SS.fffffffff+00:00 (UTC instant)
17
+ # binary -> <UPPER HEX> (matches Snowflake HEX_ENCODE, no 0x prefix)
18
+ #
19
+ # Phase 5 POC parity results (SNOW-3641471), BQ_DV_ALL_TYPES 130-row seed vs Snowflake:
20
+ # PASS (130/130): INT64, STRING, BYTES, BOOL, DATE, TIME, DATETIME, TIMESTAMP,
21
+ # JSON, ARRAY<INT64>, STRUCT, GEOGRAPHY, INTERVAL, RANGE.
22
+ # STRUCT/JSON parity achieved by round-tripping through PARSE_JSON, which sorts
23
+ # object keys alphabetically (recursively) exactly like Snowflake OBJECT/VARIANT.
24
+ # PARTIAL: FLOAT64/NUMERIC/BIGNUMERIC match except the extreme boundary rows
25
+ # (double-max, 1e29, 1e38) where the SHARED Snowflake target format
26
+ # 'FM....0000' (28 integer digits) overflows to '#'. This is a target-format
27
+ # limitation shared by all source platforms, not BigQuery-specific.
28
+
29
+ # Scale-aware numeric parity: the Snowflake target renders NUMBER as
30
+ # TO_CHAR(col, 'FM999...990.00...0') with the column's exact scale, so BigQuery
31
+ # emits FORMAT('%.<scale>f', ...) with the SAME scale. The mask
32
+ # ``{{ numeric_format_mask }}`` is resolved to a printf spec (e.g. ``%.2f``) at
33
+ # render time from the column's declared NUMERIC_SCALE / (p, s). Integers cast to
34
+ # NUMERIC because BigQuery FORMAT('%f', ...) rejects INT64. Both sides keep the
35
+ # single leading zero for |value| < 1 (e.g. 0 -> "0.00"), so they hash identically.
36
+ INT64: FORMAT('{{ numeric_format_mask }}', CAST(`{{ col_name }}` AS NUMERIC))
37
+ INTEGER: FORMAT('{{ numeric_format_mask }}', CAST(`{{ col_name }}` AS NUMERIC))
38
+
39
+ # FLOAT64 maps to Snowflake FLOAT, which normalizes via TO_CHAR(col, 'TME')
40
+ # (16-significant-figure normalized scientific notation). The shim renders the
41
+ # same shape from BigQuery FORMAT('%.15e', ...). See
42
+ # QueryGeneratorBigQuery.build_float_tme_shim.
43
+ FLOAT64: '{{ float_tme_shim }}'
44
+
45
+ # NUMERIC/BIGNUMERIC map to Snowflake NUMBER, which renders scale-aware via
46
+ # TO_CHAR(col, 'FM...0.00..0'). BigQuery mirrors that scale with the resolved
47
+ # printf mask ``{{ numeric_format_mask }}`` (e.g. NUMBER(38,9) -> '%.9f'), so a
48
+ # bounded BIGNUMERIC(p, s) that fits NUMBER hashes identically. (A bare
49
+ # BIGNUMERIC (76, 38) cannot map to NUMBER and fails L1 before L2/L3.)
50
+ NUMERIC: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
51
+ DECIMAL: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
52
+ BIGNUMERIC: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
53
+ BIGDECIMAL: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
54
+
55
+ # Snowflake BOOLEAN normalizes to uppercase 'TRUE'/'FALSE' (see
56
+ # snowflake_datatypes_normalization_templates.yaml); match it so the row hashes agree.
57
+ BOOL: CASE WHEN `{{ col_name }}` THEN 'TRUE' WHEN NOT `{{ col_name }}` THEN 'FALSE' END
58
+ BOOLEAN: CASE WHEN `{{ col_name }}` THEN 'TRUE' WHEN NOT `{{ col_name }}` THEN 'FALSE' END
59
+
60
+ STRING: RTRIM(`{{ col_name }}`)
61
+ # Snowflake BINARY normalizes via HEX_ENCODE (uppercase hex, no 0x prefix); match
62
+ # it exactly so the row hashes agree.
63
+ BYTES: UPPER(TO_HEX(`{{ col_name }}`))
64
+
65
+ # %E4Y zero-pads the year to 4 digits so year 1 renders "0001" (matches Snowflake YYYY).
66
+ DATE: FORMAT_DATE('%E4Y-%m-%d', `{{ col_name }}`)
67
+ TIME: FORMAT_TIME('%H:%M:%S', `{{ col_name }}`)
68
+ DATETIME: FORMAT_DATETIME('%E4Y-%m-%dT%H:%M:%E9S', `{{ col_name }}`)
69
+ TIMESTAMP: FORMAT_TIMESTAMP('%E4Y-%m-%dT%H:%M:%E9S%Ez', `{{ col_name }}`, 'UTC')
70
+
71
+ # Semi-structured parity: Snowflake OBJECT/VARIANT serialize with keys sorted
72
+ # alphabetically (recursively) and collapse a JSON `null` to SQL NULL. BigQuery's
73
+ # JSON type does the SAME canonicalization, so round-tripping through PARSE_JSON
74
+ # (re-serialized with TO_JSON_STRING) yields identical text to Snowflake. NULLIF on
75
+ # 'null' maps a SQL-NULL/JSON-null value to the hashing sentinel like Snowflake does.
76
+ ARRAY: NULLIF(TO_JSON_STRING(PARSE_JSON(TO_JSON_STRING(`{{ col_name }}`))), 'null')
77
+ STRUCT: NULLIF(TO_JSON_STRING(PARSE_JSON(TO_JSON_STRING(`{{ col_name }}`))), 'null')
78
+ JSON: NULLIF(TO_JSON_STRING(PARSE_JSON(TO_JSON_STRING(`{{ col_name }}`))), 'null')
79
+ # BigQuery ST_ASTEXT emits ", " between vertices; Snowflake ST_ASWKT uses ",". Collapse
80
+ # the space so multi-vertex geometries (LINESTRING/POLYGON) hash identically.
81
+ GEOGRAPHY: TRIM(REGEXP_REPLACE(ST_ASTEXT(`{{ col_name }}`), r', ', r','))
82
+
83
+ INTERVAL: CAST(`{{ col_name }}` AS STRING)
84
+ RANGE: CAST(`{{ col_name }}` AS STRING)
85
+
86
+ DEFAULT: CAST(`{{ col_name }}` AS STRING)
@@ -0,0 +1,44 @@
1
+ {% import 'query_modifiers.sql.j2' as qm with context %}
2
+ {{ qm.locking_prefix(query_modifiers) }}
3
+ SELECT
4
+ UPPER('{{ database_name | escape_sql_literal }}') AS database_name,
5
+ UPPER(c.table_schema) AS schema_name,
6
+ UPPER(c.table_name) AS table_name,
7
+ UPPER(c.column_name) AS column_name,
8
+ CASE
9
+ WHEN c.is_nullable = 'YES' THEN true
10
+ ELSE false
11
+ END AS nullable,
12
+ UPPER(c.data_type) AS data_type,
13
+ 0 AS is_primary_key,
14
+ CAST(NULL AS INT64) AS character_length,
15
+ -- BigQuery INFORMATION_SCHEMA carries NUMERIC/BIGNUMERIC precision/scale only
16
+ -- inside the parameterized type string (e.g. NUMERIC(10, 2)); a bare NUMERIC
17
+ -- defaults to (38, 9) and BIGNUMERIC to (76, 38). Resolve (p, s) here so the
18
+ -- scale-aware numeric mask renders with the column's real scale on both the
19
+ -- source and the mirrored Snowflake target (identical -> hashes match).
20
+ CASE
21
+ WHEN STARTS_WITH(UPPER(c.data_type), 'BIGNUMERIC') OR STARTS_WITH(UPPER(c.data_type), 'BIGDECIMAL')
22
+ THEN COALESCE(CAST(REGEXP_EXTRACT(c.data_type, r'\((\d+)') AS INT64), 76)
23
+ WHEN STARTS_WITH(UPPER(c.data_type), 'NUMERIC') OR STARTS_WITH(UPPER(c.data_type), 'DECIMAL')
24
+ THEN COALESCE(CAST(REGEXP_EXTRACT(c.data_type, r'\((\d+)') AS INT64), 38)
25
+ WHEN UPPER(c.data_type) IN ('INT64', 'INTEGER', 'INT', 'SMALLINT', 'BIGINT', 'TINYINT', 'BYTEINT')
26
+ THEN 38
27
+ ELSE NULL
28
+ END AS precision,
29
+ CASE
30
+ WHEN STARTS_WITH(UPPER(c.data_type), 'BIGNUMERIC') OR STARTS_WITH(UPPER(c.data_type), 'BIGDECIMAL')
31
+ THEN COALESCE(
32
+ CAST(REGEXP_EXTRACT(c.data_type, r'\(\d+\s*,\s*(\d+)\)') AS INT64),
33
+ CASE WHEN REGEXP_CONTAINS(c.data_type, r'\(\d+\)') THEN 0 ELSE 38 END)
34
+ WHEN STARTS_WITH(UPPER(c.data_type), 'NUMERIC') OR STARTS_WITH(UPPER(c.data_type), 'DECIMAL')
35
+ THEN COALESCE(
36
+ CAST(REGEXP_EXTRACT(c.data_type, r'\(\d+\s*,\s*(\d+)\)') AS INT64),
37
+ CASE WHEN REGEXP_CONTAINS(c.data_type, r'\(\d+\)') THEN 0 ELSE 9 END)
38
+ WHEN UPPER(c.data_type) IN ('INT64', 'INTEGER', 'INT', 'SMALLINT', 'BIGINT', 'TINYINT', 'BYTEINT')
39
+ THEN 0
40
+ ELSE NULL
41
+ END AS scale,
42
+ -1 AS calculated_column_size_in_bytes
43
+ FROM `{{ database_name }}`.`{{ schema_name }}`.INFORMATION_SCHEMA.COLUMNS c
44
+ WHERE c.table_name = '{{ table_name | escape_sql_literal }}';