dataops-testgen 2.2.0__py3-none-any.whl

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 (270) hide show
  1. dataops_testgen-2.2.0.dist-info/LICENSE +203 -0
  2. dataops_testgen-2.2.0.dist-info/METADATA +287 -0
  3. dataops_testgen-2.2.0.dist-info/NOTICE +5 -0
  4. dataops_testgen-2.2.0.dist-info/RECORD +270 -0
  5. dataops_testgen-2.2.0.dist-info/WHEEL +5 -0
  6. dataops_testgen-2.2.0.dist-info/entry_points.txt +2 -0
  7. dataops_testgen-2.2.0.dist-info/top_level.txt +1 -0
  8. testgen/__init__.py +0 -0
  9. testgen/__main__.py +770 -0
  10. testgen/commands/__init__.py +0 -0
  11. testgen/commands/queries/__init__.py +0 -0
  12. testgen/commands/queries/execute_cat_tests_query.py +95 -0
  13. testgen/commands/queries/execute_tests_query.py +160 -0
  14. testgen/commands/queries/generate_tests_query.py +94 -0
  15. testgen/commands/queries/profiling_query.py +366 -0
  16. testgen/commands/queries/test_parameter_validation_query.py +88 -0
  17. testgen/commands/run_execute_cat_tests.py +162 -0
  18. testgen/commands/run_execute_tests.py +168 -0
  19. testgen/commands/run_generate_tests.py +107 -0
  20. testgen/commands/run_get_entities.py +122 -0
  21. testgen/commands/run_launch_db_config.py +84 -0
  22. testgen/commands/run_observability_exporter.py +330 -0
  23. testgen/commands/run_profiling_bridge.py +495 -0
  24. testgen/commands/run_quick_start.py +168 -0
  25. testgen/commands/run_setup_profiling_tools.py +96 -0
  26. testgen/commands/run_test_definition.py +146 -0
  27. testgen/commands/run_test_parameter_validation.py +135 -0
  28. testgen/commands/run_upgrade_db_config.py +156 -0
  29. testgen/common/__init__.py +8 -0
  30. testgen/common/clean_sql.py +53 -0
  31. testgen/common/credentials.py +25 -0
  32. testgen/common/database/__init__.py +0 -0
  33. testgen/common/database/database_service.py +629 -0
  34. testgen/common/database/flavor/__init__.py +0 -0
  35. testgen/common/database/flavor/flavor_service.py +75 -0
  36. testgen/common/database/flavor/mssql_flavor_service.py +34 -0
  37. testgen/common/database/flavor/postgresql_flavor_service.py +5 -0
  38. testgen/common/database/flavor/redshift_flavor_service.py +22 -0
  39. testgen/common/database/flavor/snowflake_flavor_service.py +69 -0
  40. testgen/common/database/flavor/trino_flavor_service.py +21 -0
  41. testgen/common/date_service.py +68 -0
  42. testgen/common/display_service.py +85 -0
  43. testgen/common/docker_service.py +76 -0
  44. testgen/common/encrypt.py +55 -0
  45. testgen/common/get_pipeline_parms.py +57 -0
  46. testgen/common/logs.py +79 -0
  47. testgen/common/process_service.py +62 -0
  48. testgen/common/read_file.py +69 -0
  49. testgen/settings.py +440 -0
  50. testgen/template/dbsetup/010_create_base_schema.sql +2 -0
  51. testgen/template/dbsetup/020_create_standard_functions_sprocs.sql +179 -0
  52. testgen/template/dbsetup/030_initialize_new_schema_structure.sql +735 -0
  53. testgen/template/dbsetup/040_populate_new_schema_project.sql +59 -0
  54. testgen/template/dbsetup/050_populate_new_schema_metadata.sql +1517 -0
  55. testgen/template/dbsetup/060_create_standard_views.sql +248 -0
  56. testgen/template/dbsetup/070_create_default_users.sql +17 -0
  57. testgen/template/dbsetup/075_grant_role_rights.sql +43 -0
  58. testgen/template/dbsetup/080_set_current_revision.sql +5 -0
  59. testgen/template/dbupgrade/0100_incremental_upgrade.sql +5 -0
  60. testgen/template/dbupgrade/0101_incremental_upgrade.sql +15 -0
  61. testgen/template/dbupgrade/0102_incremental_upgrade.sql +4 -0
  62. testgen/template/dbupgrade/0103_incremental_upgrade.sql +22 -0
  63. testgen/template/dbupgrade/0104_incremental_upgrade.sql +44 -0
  64. testgen/template/dbupgrade/0105_incremental_upgrade.sql +1 -0
  65. testgen/template/dbupgrade/0106_incremental_upgrade.sql +5 -0
  66. testgen/template/dbupgrade/0107_incremental_upgrade.sql +3 -0
  67. testgen/template/dbupgrade_helpers/get_tg_revision.sql +2 -0
  68. testgen/template/exec_cat_tests/ex_cat_build_agg_table_tests.sql +116 -0
  69. testgen/template/exec_cat_tests/ex_cat_get_distinct_tables.sql +11 -0
  70. testgen/template/exec_cat_tests/ex_cat_results_parse.sql +69 -0
  71. testgen/template/exec_cat_tests/ex_cat_retrieve_agg_test_parms.sql +6 -0
  72. testgen/template/exec_cat_tests/ex_cat_test_query.sql +8 -0
  73. testgen/template/execution/ex_finalize_test_run_results.sql +37 -0
  74. testgen/template/execution/ex_get_tests_non_cat.sql +47 -0
  75. testgen/template/execution/ex_update_test_record_in_testrun_table.sql +27 -0
  76. testgen/template/execution/ex_write_test_record_to_testrun_table.sql +6 -0
  77. testgen/template/flavors/generic/exec_query_tests/ex_aggregate_match_no_drops_generic.sql +48 -0
  78. testgen/template/flavors/generic/exec_query_tests/ex_aggregate_match_num_incr_generic.sql +34 -0
  79. testgen/template/flavors/generic/exec_query_tests/ex_aggregate_match_percent_above_generic.sql +49 -0
  80. testgen/template/flavors/generic/exec_query_tests/ex_aggregate_match_percent_within_generic.sql +49 -0
  81. testgen/template/flavors/generic/exec_query_tests/ex_aggregate_match_same_generic.sql +49 -0
  82. testgen/template/flavors/generic/exec_query_tests/ex_custom_query_generic.sql +39 -0
  83. testgen/template/flavors/generic/exec_query_tests/ex_data_match_2way_generic.sql +58 -0
  84. testgen/template/flavors/generic/exec_query_tests/ex_data_match_generic.sql +44 -0
  85. testgen/template/flavors/generic/exec_query_tests/ex_prior_match_generic.sql +37 -0
  86. testgen/template/flavors/generic/exec_query_tests/ex_relative_entropy_generic.sql +53 -0
  87. testgen/template/flavors/generic/exec_query_tests/ex_window_match_no_drops_generic.sql +46 -0
  88. testgen/template/flavors/generic/exec_query_tests/ex_window_match_same_generic.sql +59 -0
  89. testgen/template/flavors/generic/profiling/contingency_counts.sql +3 -0
  90. testgen/template/flavors/generic/validate_tests/ex_get_project_column_list_generic.sql +3 -0
  91. testgen/template/flavors/mssql/exec_query_tests/ex_relative_entropy_mssql.sql +53 -0
  92. testgen/template/flavors/mssql/profiling/project_ddf_query_mssql.sql +35 -0
  93. testgen/template/flavors/mssql/profiling/project_profiling_query_mssql.yaml +246 -0
  94. testgen/template/flavors/mssql/profiling/project_secondary_profiling_query_mssql.sql +36 -0
  95. testgen/template/flavors/mssql/setup_profiling_tools/00_drop_existing_functions_mssql.sql +8 -0
  96. testgen/template/flavors/mssql/setup_profiling_tools/01_create_functions_mssql.sql +12 -0
  97. testgen/template/flavors/mssql/setup_profiling_tools/02_create_functions_mssql.sql +54 -0
  98. testgen/template/flavors/mssql/setup_profiling_tools/create_qc_schema_mssql.sql +4 -0
  99. testgen/template/flavors/mssql/setup_profiling_tools/grant_execute_privileges_mssql.sql +1 -0
  100. testgen/template/flavors/postgresql/exec_query_tests/ex_window_match_no_drops_postgresql.sql +46 -0
  101. testgen/template/flavors/postgresql/exec_query_tests/ex_window_match_same_postgresql.sql +59 -0
  102. testgen/template/flavors/postgresql/profiling/project_ddf_query_postgresql.sql +42 -0
  103. testgen/template/flavors/postgresql/profiling/project_profiling_query_postgresql.yaml +225 -0
  104. testgen/template/flavors/postgresql/profiling/project_secondary_profiling_query_postgresql.sql +28 -0
  105. testgen/template/flavors/postgresql/setup_profiling_tools/create_functions_postgresql.sql +157 -0
  106. testgen/template/flavors/postgresql/setup_profiling_tools/create_qc_schema_postgresql.sql +1 -0
  107. testgen/template/flavors/postgresql/setup_profiling_tools/grant_execute_privileges_postgresql.sql +2 -0
  108. testgen/template/flavors/redshift/profiling/project_ddf_query_redshift.sql +38 -0
  109. testgen/template/flavors/redshift/profiling/project_profiling_query_redshift.yaml +221 -0
  110. testgen/template/flavors/redshift/profiling/project_secondary_profiling_query_redshift.sql +29 -0
  111. testgen/template/flavors/redshift/setup_profiling_tools/create_functions_redshift.sql +115 -0
  112. testgen/template/flavors/redshift/setup_profiling_tools/create_qc_schema_redshift.sql +1 -0
  113. testgen/template/flavors/redshift/setup_profiling_tools/grant_execute_privileges_redshift.sql +2 -0
  114. testgen/template/flavors/snowflake/profiling/project_ddf_query_snowflake.sql +38 -0
  115. testgen/template/flavors/snowflake/profiling/project_profiling_query_snowflake.yaml +220 -0
  116. testgen/template/flavors/snowflake/profiling/project_secondary_profiling_query_snowflake.sql +29 -0
  117. testgen/template/flavors/snowflake/setup_profiling_tools/create_functions_snowflake.sql +69 -0
  118. testgen/template/flavors/snowflake/setup_profiling_tools/create_qc_schema_snowflake.sql +1 -0
  119. testgen/template/flavors/snowflake/setup_profiling_tools/grant_execute_privileges_snowflake.sql +6 -0
  120. testgen/template/flavors/trino/profiling/project_profiling_query_trino.yaml +219 -0
  121. testgen/template/flavors/trino/setup_profiling_tools/create_functions_trino.sql +92 -0
  122. testgen/template/flavors/trino/setup_profiling_tools/create_qc_schema_trino.sql +1 -0
  123. testgen/template/gen_funny_cat_tests/gen_test_constant.sql +104 -0
  124. testgen/template/gen_funny_cat_tests/gen_test_distinct_value_ct.sql +98 -0
  125. testgen/template/gen_funny_cat_tests/gen_test_row_ct.sql +57 -0
  126. testgen/template/gen_funny_cat_tests/gen_test_row_ct_pct.sql +59 -0
  127. testgen/template/generation/gen_delete_old_tests.sql +5 -0
  128. testgen/template/generation/gen_insert_test_suite.sql +5 -0
  129. testgen/template/generation/gen_retrieve_or_insert_test_suite.sql +58 -0
  130. testgen/template/generation/gen_standard_test_type_list.sql +13 -0
  131. testgen/template/generation/gen_standard_tests.sql +48 -0
  132. testgen/template/get_entities/get_connection.sql +21 -0
  133. testgen/template/get_entities/get_connections_list.sql +9 -0
  134. testgen/template/get_entities/get_latest.sql +4 -0
  135. testgen/template/get_entities/get_profile.sql +12 -0
  136. testgen/template/get_entities/get_profile_info.sql +17 -0
  137. testgen/template/get_entities/get_profile_list.sql +17 -0
  138. testgen/template/get_entities/get_profile_screen.sql +275 -0
  139. testgen/template/get_entities/get_project_list.sql +6 -0
  140. testgen/template/get_entities/get_table_group_list.sql +10 -0
  141. testgen/template/get_entities/get_test_generation_list.sql +18 -0
  142. testgen/template/get_entities/get_test_info.sql +41 -0
  143. testgen/template/get_entities/get_test_results_for_run_cli.sql +16 -0
  144. testgen/template/get_entities/get_test_run_list.sql +24 -0
  145. testgen/template/get_entities/get_test_suite.sql +13 -0
  146. testgen/template/get_entities/get_test_suite_list.sql +18 -0
  147. testgen/template/get_entities/list_test_types.sql +4 -0
  148. testgen/template/observability/get_event_data.sql +23 -0
  149. testgen/template/observability/get_test_results.sql +41 -0
  150. testgen/template/observability/update_test_results_exported_to_observability.sql +12 -0
  151. testgen/template/parms/parms_profiling.sql +34 -0
  152. testgen/template/parms/parms_test_execution.sql +13 -0
  153. testgen/template/parms/parms_test_gen.sql +23 -0
  154. testgen/template/profiling/contingency_columns.sql +7 -0
  155. testgen/template/profiling/datatype_suggestions.sql +56 -0
  156. testgen/template/profiling/functional_datatype.sql +523 -0
  157. testgen/template/profiling/functional_tabletype_stage.sql +48 -0
  158. testgen/template/profiling/functional_tabletype_update.sql +8 -0
  159. testgen/template/profiling/pii_flag.sql +133 -0
  160. testgen/template/profiling/profile_anomalies_screen_column.sql +22 -0
  161. testgen/template/profiling/profile_anomalies_screen_multi_column.sql +58 -0
  162. testgen/template/profiling/profile_anomalies_screen_table.sql +22 -0
  163. testgen/template/profiling/profile_anomalies_screen_table_dates.sql +30 -0
  164. testgen/template/profiling/profile_anomalies_screen_variants.sql +40 -0
  165. testgen/template/profiling/profile_anomaly_types_get.sql +3 -0
  166. testgen/template/profiling/project_get_table_sample_count.sql +22 -0
  167. testgen/template/profiling/project_profile_run_record_insert.sql +8 -0
  168. testgen/template/profiling/project_profile_run_record_update.sql +5 -0
  169. testgen/template/profiling/project_profile_run_record_update_status.sql +5 -0
  170. testgen/template/profiling/project_update_profile_results_to_estimates.sql +32 -0
  171. testgen/template/profiling/refresh_anomalies.sql +33 -0
  172. testgen/template/profiling/refresh_data_chars_from_profiling.sql +156 -0
  173. testgen/template/profiling/secondary_profiling_columns.sql +12 -0
  174. testgen/template/profiling/secondary_profiling_delete.sql +4 -0
  175. testgen/template/profiling/secondary_profiling_update.sql +18 -0
  176. testgen/template/quick_start/populate_target_data.sql +1077 -0
  177. testgen/template/quick_start/recreate_target_data_schema.sql +167 -0
  178. testgen/template/quick_start/update_target_data.sql +100 -0
  179. testgen/template/updates/create_tmp_test_definition.sql +19 -0
  180. testgen/template/updates/get_test_def_parms.sql +38 -0
  181. testgen/template/updates/populate_stg_test_definitions.sql +184 -0
  182. testgen/template/validate_tests/ex_disable_tests_test_definitions.sql +5 -0
  183. testgen/template/validate_tests/ex_flag_tests_test_definitions.sql +64 -0
  184. testgen/template/validate_tests/ex_get_project_column_list_generic.sql +3 -0
  185. testgen/template/validate_tests/ex_get_test_column_list_tg.sql +65 -0
  186. testgen/template/validate_tests/ex_write_test_val_errors.sql +22 -0
  187. testgen/ui/__init__.py +0 -0
  188. testgen/ui/app.py +98 -0
  189. testgen/ui/assets/dk_logo.svg +46 -0
  190. testgen/ui/assets/question_mark.png +0 -0
  191. testgen/ui/assets/scripts.js +68 -0
  192. testgen/ui/assets/style.css +140 -0
  193. testgen/ui/bootstrap.py +109 -0
  194. testgen/ui/components/__init__.py +0 -0
  195. testgen/ui/components/frontend/css/KFOlCnqEu92Fr1MmEU9fBBc4.woff2 +0 -0
  196. testgen/ui/components/frontend/css/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2 +0 -0
  197. testgen/ui/components/frontend/css/KFOmCnqEu92Fr1Mu4mxK.woff2 +0 -0
  198. testgen/ui/components/frontend/css/KFOmCnqEu92Fr1Mu7GxKOzY.woff2 +0 -0
  199. testgen/ui/components/frontend/css/material-symbols-rounded.css +24 -0
  200. testgen/ui/components/frontend/css/material-symbols-rounded.woff2 +0 -0
  201. testgen/ui/components/frontend/css/roboto-font-faces.css +35 -0
  202. testgen/ui/components/frontend/css/shared.css +36 -0
  203. testgen/ui/components/frontend/img/dk_logo.svg +46 -0
  204. testgen/ui/components/frontend/index.html +17 -0
  205. testgen/ui/components/frontend/js/components/breadcrumbs.js +86 -0
  206. testgen/ui/components/frontend/js/components/button.js +66 -0
  207. testgen/ui/components/frontend/js/components/location.js +62 -0
  208. testgen/ui/components/frontend/js/components/select.js +75 -0
  209. testgen/ui/components/frontend/js/components/sidebar.js +358 -0
  210. testgen/ui/components/frontend/js/main.js +99 -0
  211. testgen/ui/components/frontend/js/streamlit.js +19 -0
  212. testgen/ui/components/frontend/js/van.min.js +1 -0
  213. testgen/ui/components/utils/__init__.py +0 -0
  214. testgen/ui/components/utils/callbacks.py +51 -0
  215. testgen/ui/components/utils/component.py +13 -0
  216. testgen/ui/components/widgets/__init__.py +6 -0
  217. testgen/ui/components/widgets/breadcrumbs.py +32 -0
  218. testgen/ui/components/widgets/location.py +65 -0
  219. testgen/ui/components/widgets/modal.py +97 -0
  220. testgen/ui/components/widgets/sidebar.py +69 -0
  221. testgen/ui/navigation/__init__.py +0 -0
  222. testgen/ui/navigation/menu.py +42 -0
  223. testgen/ui/navigation/page.py +20 -0
  224. testgen/ui/navigation/router.py +63 -0
  225. testgen/ui/queries/__init__.py +0 -0
  226. testgen/ui/queries/authentication_queries.py +47 -0
  227. testgen/ui/queries/connection_queries.py +121 -0
  228. testgen/ui/queries/profiling_queries.py +148 -0
  229. testgen/ui/queries/project_queries.py +9 -0
  230. testgen/ui/queries/table_group_queries.py +186 -0
  231. testgen/ui/queries/test_definition_queries.py +270 -0
  232. testgen/ui/queries/test_run_queries.py +32 -0
  233. testgen/ui/queries/test_suite_queries.py +145 -0
  234. testgen/ui/scripts/__init__.py +0 -0
  235. testgen/ui/scripts/patch_streamlit.py +111 -0
  236. testgen/ui/services/__init__.py +0 -0
  237. testgen/ui/services/authentication_service.py +119 -0
  238. testgen/ui/services/connection_service.py +220 -0
  239. testgen/ui/services/database_service.py +282 -0
  240. testgen/ui/services/form_service.py +1008 -0
  241. testgen/ui/services/javascript_service.py +44 -0
  242. testgen/ui/services/query_service.py +316 -0
  243. testgen/ui/services/string_service.py +12 -0
  244. testgen/ui/services/table_group_service.py +130 -0
  245. testgen/ui/services/test_definition_service.py +117 -0
  246. testgen/ui/services/test_run_service.py +13 -0
  247. testgen/ui/services/test_suite_service.py +76 -0
  248. testgen/ui/services/toolbar_service.py +77 -0
  249. testgen/ui/session.py +46 -0
  250. testgen/ui/views/__init__.py +0 -0
  251. testgen/ui/views/app_log_modal.py +92 -0
  252. testgen/ui/views/connections.py +72 -0
  253. testgen/ui/views/connections_base.py +367 -0
  254. testgen/ui/views/login.py +40 -0
  255. testgen/ui/views/not_found.py +16 -0
  256. testgen/ui/views/overview.py +34 -0
  257. testgen/ui/views/profiling_anomalies.py +501 -0
  258. testgen/ui/views/profiling_details.py +335 -0
  259. testgen/ui/views/profiling_modal.py +40 -0
  260. testgen/ui/views/profiling_results.py +206 -0
  261. testgen/ui/views/profiling_summary.py +177 -0
  262. testgen/ui/views/project_settings.py +74 -0
  263. testgen/ui/views/table_groups.py +530 -0
  264. testgen/ui/views/test_definitions.py +1020 -0
  265. testgen/ui/views/test_results.py +908 -0
  266. testgen/ui/views/test_runs.py +195 -0
  267. testgen/ui/views/test_suites.py +545 -0
  268. testgen/utils/__init__.py +0 -0
  269. testgen/utils/plugins.py +17 -0
  270. testgen/utils/singleton.py +14 -0
@@ -0,0 +1,41 @@
1
+ /*test-info: project-code, test-suite
2
+ Output: current detail of tests to perform for all columns within the test-suite
3
+ Alternative: project-code, connection-id
4
+ Optional: last_auto_run_date (==test-gen-run-id==), schema-name, table-name, column-name*/
5
+
6
+ SELECT s.project_code as project_key,
7
+ s.cat_test_id,
8
+ s.test_suite as test_suite_key,
9
+ s.test_type,
10
+ COALESCE(s.test_description, tt.test_description) as test_description,
11
+ CASE
12
+ WHEN COALESCE(s.lock_refresh, 'N') = 'N' THEN 'Allowed'
13
+ ELSE 'Locked'
14
+ END as test_refresh,
15
+ CASE
16
+ WHEN COALESCE(s.test_active, 'Y') = 'N' THEN 'Disabled'
17
+ ELSE 'Enabled'
18
+ END as disabled,
19
+ COALESCE(s.watch_level, 'Warn') as watch_level,
20
+ s.schema_name,
21
+ s.table_name,
22
+ s.column_name,
23
+ tt.measure_uom,
24
+ s.threshold_value,
25
+ s.baseline_ct,
26
+ s.baseline_unique_ct,
27
+ s.baseline_value,
28
+ s.baseline_value_ct,
29
+ s.baseline_sum,
30
+ s.baseline_avg,
31
+ s.baseline_sd,
32
+ s.subset_condition,
33
+ s.check_result,
34
+ s.last_auto_gen_date,
35
+ s.profiling_as_of_date
36
+ FROM test_definitions s
37
+ INNER JOIN test_types tt ON s.test_type = tt.test_type
38
+ WHERE s.project_code = '{PROJECT_CODE}'
39
+ AND s.test_suite = '{TEST_SUITE}'
40
+ ORDER BY s.schema_name, s.table_name,
41
+ s.column_name, s.test_type;
@@ -0,0 +1,16 @@
1
+ SELECT test_suite as test_suite_key,
2
+ table_name,
3
+ column_names as column_name,
4
+ r.test_type,
5
+ CASE
6
+ WHEN result_code = 1 THEN 'Pass'
7
+ WHEN result_code = 0 THEN 'Fail'
8
+ END as result,
9
+ COALESCE(r.result_message, '') as result_message,
10
+ result_measure,
11
+ tt.measure_uom
12
+ FROM test_results r
13
+ INNER JOIN test_types tt ON r.test_type = tt.test_type
14
+ WHERE test_run_id = '{TEST_RUN_ID}'::UUID
15
+ {ERRORS_ONLY}
16
+ ORDER BY r.schema_name, r.table_name, r.column_names, r.test_type;
@@ -0,0 +1,24 @@
1
+ /*test-run-list: project-code, test-suite
2
+ Output: list of test runs performed for a test_suite
3
+ Alternative: project-code, table-name
4
+ Optional: table-name, column-name, from-date, thru-date*/
5
+
6
+ Select tr.test_suite as test_suite_key,
7
+ tr.test_starttime as test_time,
8
+ tr.status,
9
+ tr.id::VARCHAR(50) as test_run_id,
10
+ COUNT(DISTINCT lower(r.schema_name || '.' || table_name)) as table_ct,
11
+ COUNT(*) as result_ct,
12
+ SUM(CASE WHEN r.result_code = 0 THEN 1 END) as fail_ct,
13
+ SUM(CASE WHEN r.observability_status = 'Sent' THEN 1 END) as sent_to_obs,
14
+ process_id
15
+ from test_runs tr
16
+ INNER JOIN test_results r
17
+ ON (tr.id = r.test_run_id)
18
+ where tr.project_code = '{PROJECT_CODE}'
19
+ and tr.test_suite = '{TEST_SUITE}'
20
+ GROUP BY tr.project_code,
21
+ tr.test_suite,
22
+ tr.test_starttime,
23
+ tr.status,
24
+ tr.id;
@@ -0,0 +1,13 @@
1
+ SELECT
2
+ id as test_suite_id,
3
+ project_code as project_key,
4
+ test_suite as test_suite_key,
5
+ connection_id,
6
+ test_suite_description,
7
+ test_action as default_test_action,
8
+ test_suite_schema,
9
+ component_key,
10
+ component_type
11
+ FROM test_suites
12
+ WHERE project_code = '{PROJECT_CODE}'
13
+ AND test_suite = '{TEST_SUITE}';
@@ -0,0 +1,18 @@
1
+ SELECT
2
+ ts.id as test_suite_id,
3
+ ts.project_code as project_key,
4
+ ts.test_suite as test_suite_key,
5
+ ts.connection_id,
6
+ ts.test_suite_description,
7
+ MAX(tr.test_starttime) as last_run
8
+ FROM test_suites ts
9
+ LEFT JOIN test_runs tr
10
+ ON ts.project_code = tr.project_code
11
+ AND ts.test_suite = tr.test_suite
12
+ WHERE ts.project_code = '{PROJECT_CODE}'
13
+ GROUP BY ts.id,
14
+ ts.project_code,
15
+ ts.test_suite,
16
+ ts.connection_id,
17
+ ts.test_suite_description
18
+ ORDER BY ts.test_suite;
@@ -0,0 +1,4 @@
1
+ SELECT t.test_type, t.test_description, dq_dimension
2
+ FROM test_types t
3
+ WHERE test_description > ''
4
+ ORDER BY test_type;
@@ -0,0 +1,23 @@
1
+ Select
2
+ c.sql_flavor as sql_flavor,
3
+ COALESCE(ts.component_key, tg.id::VARCHAR) as dataset_key,
4
+ COALESCE(ts.component_name, tg.table_groups_name) as dataset_name,
5
+ tg.table_group_schema as schema,
6
+ c.connection_name as connection_name,
7
+ c.project_db as project_db,
8
+ tg.profile_sample_min_count as profile_sample_minimum_count,
9
+ ts.table_groups_id as table_groups_id,
10
+ tg.profile_use_sampling as profile_use_sampling,
11
+ tg.profile_sample_percent as profile_sample_percent,
12
+ pr.project_code as project_code,
13
+ tg.profiling_table_set as profiling_table_set,
14
+ tg.profiling_include_mask as profiling_include_mask,
15
+ tg.profiling_exclude_mask as profiling_exclude_mask,
16
+ pr.observability_api_key as observability_api_key,
17
+ pr.observability_api_url as observability_api_url
18
+ from test_suites ts
19
+ join connections c on c.connection_id = ts.connection_id
20
+ join projects pr on pr.project_code = ts.project_code
21
+ join table_groups tg on tg.id = ts.table_groups_id
22
+ where pr.project_code = '{PROJECT_CODE}'
23
+ and ts.test_suite = '{TEST_SUITE}'
@@ -0,0 +1,41 @@
1
+ SELECT
2
+ project_name,
3
+ component_tool,
4
+ "schema",
5
+ connection_name,
6
+ project_db,
7
+ sample_min_count,
8
+ group_id,
9
+ uses_sampling,
10
+ project_code,
11
+ sample_percentage,
12
+ profiling_table_set,
13
+ profiling_include_mask,
14
+ profiling_exclude_mask,
15
+ component_type,
16
+ component_key,
17
+ component_name,
18
+ column_names,
19
+ table_name,
20
+ test_suite,
21
+ input_parameters,
22
+ test_definition_id,
23
+ "type",
24
+ min_threshold,
25
+ max_threshold,
26
+ "name",
27
+ description,
28
+ start_time,
29
+ end_time,
30
+ dq_dimension,
31
+ result_status,
32
+ result_message,
33
+ result_id,
34
+ metric_value,
35
+ measure_uom,
36
+ measure_uom_description
37
+ FROM v_queued_observability_results
38
+ where project_code = '{PROJECT_CODE}'
39
+ and test_suite = '{TEST_SUITE}'
40
+ order by start_time asc
41
+ limit {MAX_QTY_EVENTS}
@@ -0,0 +1,12 @@
1
+ /*test-results: customer-code, test-group, result-ids
2
+ Output: updates exported results */
3
+
4
+ with selects
5
+ as ( SELECT UNNEST(ARRAY[{RESULT_IDS}]) AS selected_id )
6
+ update test_results set observability_status = 'Sent'
7
+ from test_results r
8
+ INNER JOIN selects s ON (r.result_id = s.selected_id)
9
+ where r.id = test_results.id
10
+ and r.observability_status = 'Queued'
11
+ and r.project_code = '{PROJECT_CODE}'
12
+ and r.test_suite = '{TEST_SUITE}'
@@ -0,0 +1,34 @@
1
+ SELECT cc.project_code,
2
+ cc.connection_id::VARCHAR(50) as connection_id,
3
+ cc.sql_flavor,
4
+ cc.url,
5
+ cc.connect_by_url,
6
+ cc.connect_by_key,
7
+ cc.private_key,
8
+ cc.private_key_passphrase,
9
+ cc.project_host,
10
+ cc.project_port,
11
+ cc.project_user,
12
+ cc.project_db,
13
+ tg.id::VARCHAR(50) as table_groups_id,
14
+ tg.table_group_schema,
15
+ CASE
16
+ WHEN tg.profiling_table_set ILIKE '''%''' THEN tg.profiling_table_set
17
+ ELSE fn_format_csv_quotes(tg.profiling_table_set)
18
+ END as profiling_table_set,
19
+ tg.profiling_include_mask,
20
+ tg.profiling_exclude_mask,
21
+ tg.profile_id_column_mask,
22
+ tg.profile_sk_column_mask,
23
+ tg.profile_use_sampling,
24
+ tg.profile_sample_percent,
25
+ tg.profile_sample_min_count,
26
+ cc.project_qc_schema,
27
+ tg.profile_do_pair_rules,
28
+ tg.profile_pair_rule_pct,
29
+ cc.max_threads
30
+ FROM table_groups tg
31
+ INNER JOIN connections cc
32
+ on cc.project_code = tg.project_code
33
+ and cc.connection_id = tg.connection_id
34
+ WHERE tg.id = '{TABLE_GROUPS_ID}'::UUID;
@@ -0,0 +1,13 @@
1
+ SELECT g.project_code, g.connection_id::varchar(50),
2
+ cc.sql_flavor,
3
+ cc.project_host, cc.project_port,
4
+ cc.project_user, cc.project_db, tg.table_group_schema, cc.project_qc_schema,
5
+ cc.connect_by_key,
6
+ cc.private_key,
7
+ cc.private_key_passphrase,
8
+ cc.max_threads, cc.max_query_chars, cc.url, cc.connect_by_url
9
+ FROM test_suites g
10
+ INNER JOIN connections cc ON (g.connection_id = cc.connection_id)
11
+ INNER join table_groups tg ON (g.table_groups_id = tg.id)
12
+ WHERE g.project_code = '{PROJECT_CODE}'
13
+ AND g.test_suite = '{TEST_SUITE}';
@@ -0,0 +1,23 @@
1
+ SELECT tg.project_code, tg.connection_id,
2
+ cc.sql_flavor,
3
+ cc.project_host,
4
+ cc.project_port,
5
+ cc.project_user,
6
+ cc.connect_by_key,
7
+ cc.private_key,
8
+ cc.private_key_passphrase,
9
+ cc.project_db,
10
+ tg.table_group_schema,
11
+ s.export_to_observability,
12
+ s.test_suite,
13
+ s.id::VARCHAR as test_suite_id,
14
+ cc.url,
15
+ cc.connect_by_url,
16
+ CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - CAST(tg.profiling_delay_days AS integer) * INTERVAL '1 day' as profiling_as_of_date
17
+ FROM table_groups tg
18
+ INNER JOIN connections cc
19
+ ON (tg.connection_id = cc.connection_id)
20
+ LEFT JOIN test_suites s
21
+ ON (tg.connection_id = s.connection_id
22
+ AND '{TEST_SUITE}' = s.test_suite)
23
+ WHERE tg.id = '{TABLE_GROUPS_ID}';
@@ -0,0 +1,7 @@
1
+ -- All codes / categories with few distinct values
2
+ SELECT schema_name, table_name, STRING_AGG(column_name, ',' ORDER BY column_name) as contingency_columns
3
+ FROM profile_results p
4
+ WHERE profile_run_id = '{PROFILE_RUN_ID}'::UUID
5
+ AND functional_data_type IN ('Code', 'Category')
6
+ AND distinct_value_ct BETWEEN 2 AND {CONTINGENCY_MAX_VALUES}
7
+ GROUP BY schema_name, table_name;
@@ -0,0 +1,56 @@
1
+ UPDATE profile_results
2
+ SET datatype_suggestion =
3
+ CASE
4
+ WHEN record_ct > 500 AND column_name not ILIKE '%id' THEN
5
+ CASE
6
+ WHEN general_type = 'A' AND column_name ILIKE '%zip%'
7
+ AND max_length <= 10 THEN 'VARCHAR(10)'
8
+ WHEN general_type = 'A'
9
+ AND numeric_ct > 0
10
+ AND value_ct = numeric_ct + zero_length_ct
11
+ AND POSITION('.' in top_freq_values) > 0 THEN 'DECIMAL(18,4)'
12
+ WHEN general_type = 'A'
13
+ AND numeric_ct > 0
14
+ AND value_ct = numeric_ct + zero_length_ct
15
+ AND max_length <= 6
16
+ AND POSITION('.' in top_freq_values) = 0 THEN 'INTEGER'
17
+ WHEN general_type = 'A'
18
+ AND numeric_ct > 0
19
+ AND value_ct = numeric_ct + zero_length_ct
20
+ AND max_length > 6
21
+ AND POSITION('.' in top_freq_values) = 0 THEN 'BIGINT'
22
+ WHEN general_type = 'A'
23
+ AND date_ct > 0
24
+ AND value_ct = date_ct + zero_length_ct THEN 'DATE'
25
+ WHEN general_type = 'A'
26
+ AND max_length <= 5 THEN 'VARCHAR(10)'
27
+ WHEN general_type = 'A'
28
+ AND max_length IS NOT NULL
29
+ THEN 'VARCHAR('
30
+ || ( (1 + TRUNC( (max_length + 10) /20.0, 0)) * 20)::VARCHAR(10)
31
+ || ')'
32
+ WHEN general_type = 'N'
33
+ AND RTRIM(SPLIT_PART(column_type, ',', 2),')') > '0'
34
+ AND fractional_sum = 0
35
+ AND min_value >= -100
36
+ AND max_value <= 100
37
+ THEN 'SMALLINT'
38
+ WHEN general_type = 'N'
39
+ AND RTRIM(SPLIT_PART(column_type, ',', 2),')') > '0'
40
+ AND fractional_sum = 0
41
+ AND min_value >= -100000000
42
+ AND max_value <= 100000000
43
+ THEN 'INTEGER'
44
+ WHEN general_type = 'N'
45
+ AND RTRIM(SPLIT_PART(column_type, ',', 2),')') > '0'
46
+ AND fractional_sum = 0
47
+ AND (min_value < -100000000
48
+ OR max_value > 100000000)
49
+ THEN 'BIGINT'
50
+ ELSE LOWER(column_type)
51
+ END
52
+ ELSE LOWER(column_type)
53
+ END
54
+ WHERE project_code = '{PROJECT_CODE}'
55
+ AND schema_name = '{DATA_SCHEMA}'
56
+ AND run_date = '{RUN_DATE}';