@zimezone/z-command 1.1.1 → 1.1.2

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 (282) hide show
  1. package/README.md +13 -1
  2. package/dist/commands/init.d.ts.map +1 -1
  3. package/dist/commands/init.js +34 -9
  4. package/dist/commands/init.js.map +1 -1
  5. package/package.json +8 -3
  6. package/templates.zip +0 -0
  7. package/templates/agents/accessibility-expert.agent.md +0 -56
  8. package/templates/agents/ai-engineer.agent.md +0 -61
  9. package/templates/agents/angular-architect.agent.md +0 -49
  10. package/templates/agents/api-designer.agent.md +0 -40
  11. package/templates/agents/api-documenter.agent.md +0 -161
  12. package/templates/agents/architect-review.agent.md +0 -146
  13. package/templates/agents/arm-cortex-expert.agent.md +0 -288
  14. package/templates/agents/azure-infra-engineer.agent.md +0 -57
  15. package/templates/agents/backend-architect.agent.md +0 -309
  16. package/templates/agents/backend-developer.agent.md +0 -61
  17. package/templates/agents/backend-security-coder.agent.md +0 -152
  18. package/templates/agents/bash-pro.agent.md +0 -285
  19. package/templates/agents/blockchain-developer.agent.md +0 -57
  20. package/templates/agents/build-engineer.agent.md +0 -56
  21. package/templates/agents/business-analyst.agent.md +0 -47
  22. package/templates/agents/c-pro.agent.md +0 -35
  23. package/templates/agents/c4-code.agent.md +0 -320
  24. package/templates/agents/c4-component.agent.md +0 -227
  25. package/templates/agents/c4-container.agent.md +0 -248
  26. package/templates/agents/c4-context.agent.md +0 -235
  27. package/templates/agents/cli-developer.agent.md +0 -57
  28. package/templates/agents/cloud-architect.agent.md +0 -56
  29. package/templates/agents/code-architect.agent.md +0 -63
  30. package/templates/agents/code-reviewer.agent.md +0 -49
  31. package/templates/agents/competitive-analyst.agent.md +0 -48
  32. package/templates/agents/conductor-validator.agent.md +0 -245
  33. package/templates/agents/context-manager.agent.md +0 -55
  34. package/templates/agents/cpp-pro.agent.md +0 -59
  35. package/templates/agents/csharp-developer.agent.md +0 -57
  36. package/templates/agents/csharp-pro.agent.md +0 -38
  37. package/templates/agents/customer-support.agent.md +0 -148
  38. package/templates/agents/data-engineer.agent.md +0 -55
  39. package/templates/agents/data-researcher.agent.md +0 -55
  40. package/templates/agents/data-scientist.agent.md +0 -56
  41. package/templates/agents/database-admin.agent.md +0 -142
  42. package/templates/agents/database-administrator.agent.md +0 -50
  43. package/templates/agents/database-architect.agent.md +0 -238
  44. package/templates/agents/database-optimizer.agent.md +0 -144
  45. package/templates/agents/debugger.agent.md +0 -30
  46. package/templates/agents/deployment-engineer.agent.md +0 -0
  47. package/templates/agents/devops-engineer.agent.md +0 -59
  48. package/templates/agents/devops-troubleshooter.agent.md +0 -138
  49. package/templates/agents/django-developer.agent.md +0 -50
  50. package/templates/agents/django-pro.agent.md +0 -159
  51. package/templates/agents/docs-architect.agent.md +0 -77
  52. package/templates/agents/documentation-engineer.agent.md +0 -57
  53. package/templates/agents/dotnet-architect.agent.md +0 -175
  54. package/templates/agents/dx-optimizer.agent.md +0 -63
  55. package/templates/agents/electron-pro.agent.md +0 -56
  56. package/templates/agents/elixir-pro.agent.md +0 -38
  57. package/templates/agents/embedded-systems.agent.md +0 -55
  58. package/templates/agents/error-detective.agent.md +0 -32
  59. package/templates/agents/event-sourcing-architect.agent.md +0 -42
  60. package/templates/agents/fastapi-pro.agent.md +0 -171
  61. package/templates/agents/fintech-engineer.agent.md +0 -57
  62. package/templates/agents/firmware-analyst.agent.md +0 -330
  63. package/templates/agents/flutter-expert.agent.md +0 -50
  64. package/templates/agents/frontend-developer.agent.md +0 -59
  65. package/templates/agents/frontend-security-coder.agent.md +0 -149
  66. package/templates/agents/fullstack-developer.agent.md +0 -46
  67. package/templates/agents/git-workflow-manager.agent.md +0 -57
  68. package/templates/agents/golang-pro.agent.md +0 -50
  69. package/templates/agents/graphql-architect.agent.md +0 -48
  70. package/templates/agents/haskell-pro.agent.md +0 -37
  71. package/templates/agents/hr-pro.agent.md +0 -105
  72. package/templates/agents/incident-responder.agent.md +0 -190
  73. package/templates/agents/ios-developer.agent.md +0 -198
  74. package/templates/agents/iot-engineer.agent.md +0 -56
  75. package/templates/agents/java-architect.agent.md +0 -48
  76. package/templates/agents/java-pro.agent.md +0 -156
  77. package/templates/agents/javascript-pro.agent.md +0 -35
  78. package/templates/agents/julia-pro.agent.md +0 -187
  79. package/templates/agents/kotlin-specialist.agent.md +0 -50
  80. package/templates/agents/laravel-specialist.agent.md +0 -50
  81. package/templates/agents/legacy-modernizer.agent.md +0 -56
  82. package/templates/agents/legal-advisor.agent.md +0 -49
  83. package/templates/agents/llm-architect.agent.md +0 -58
  84. package/templates/agents/malware-analyst.agent.md +0 -272
  85. package/templates/agents/mcp-developer.agent.md +0 -54
  86. package/templates/agents/mermaid-expert.agent.md +0 -39
  87. package/templates/agents/microservices-architect.agent.md +0 -47
  88. package/templates/agents/minecraft-bukkit-pro.agent.md +0 -104
  89. package/templates/agents/ml-engineer.agent.md +0 -56
  90. package/templates/agents/mlops-engineer.agent.md +0 -56
  91. package/templates/agents/mobile-developer.agent.md +0 -45
  92. package/templates/agents/mobile-security-coder.agent.md +0 -163
  93. package/templates/agents/monorepo-architect.agent.md +0 -44
  94. package/templates/agents/multi-agent-coordinator.agent.md +0 -55
  95. package/templates/agents/network-engineer.agent.md +0 -57
  96. package/templates/agents/nextjs-developer.agent.md +0 -48
  97. package/templates/agents/nlp-engineer.agent.md +0 -58
  98. package/templates/agents/observability-engineer.agent.md +0 -228
  99. package/templates/agents/payment-integration.agent.md +0 -56
  100. package/templates/agents/performance-engineer.agent.md +0 -167
  101. package/templates/agents/performance-optimizer.agent.md +0 -57
  102. package/templates/agents/php-pro.agent.md +0 -43
  103. package/templates/agents/platform-engineer.agent.md +0 -57
  104. package/templates/agents/posix-shell-pro.agent.md +0 -284
  105. package/templates/agents/postgres-pro.agent.md +0 -58
  106. package/templates/agents/product-manager.agent.md +0 -55
  107. package/templates/agents/project-manager.agent.md +0 -57
  108. package/templates/agents/prompt-engineer.agent.md +0 -58
  109. package/templates/agents/python-pro.agent.md +0 -48
  110. package/templates/agents/quant-analyst.agent.md +0 -32
  111. package/templates/agents/rails-expert.agent.md +0 -50
  112. package/templates/agents/react-specialist.agent.md +0 -49
  113. package/templates/agents/refactoring-specialist.agent.md +0 -56
  114. package/templates/agents/reference-builder.agent.md +0 -167
  115. package/templates/agents/research-analyst.agent.md +0 -63
  116. package/templates/agents/reverse-engineer.agent.md +0 -202
  117. package/templates/agents/risk-manager.agent.md +0 -41
  118. package/templates/agents/ruby-pro.agent.md +0 -35
  119. package/templates/agents/rust-pro.agent.md +0 -156
  120. package/templates/agents/sales-automator.agent.md +0 -35
  121. package/templates/agents/scala-pro.agent.md +0 -60
  122. package/templates/agents/scrum-master.agent.md +0 -54
  123. package/templates/agents/search-specialist.agent.md +0 -59
  124. package/templates/agents/security-analyst.agent.md +0 -57
  125. package/templates/agents/security-auditor.agent.md +0 -138
  126. package/templates/agents/security-engineer.agent.md +0 -57
  127. package/templates/agents/seo-authority-builder.agent.md +0 -116
  128. package/templates/agents/seo-cannibalization-detector.agent.md +0 -103
  129. package/templates/agents/seo-content-auditor.agent.md +0 -63
  130. package/templates/agents/seo-content-planner.agent.md +0 -88
  131. package/templates/agents/seo-content-refresher.agent.md +0 -98
  132. package/templates/agents/seo-content-writer.agent.md +0 -76
  133. package/templates/agents/seo-keyword-strategist.agent.md +0 -75
  134. package/templates/agents/seo-meta-optimizer.agent.md +0 -72
  135. package/templates/agents/seo-snippet-hunter.agent.md +0 -94
  136. package/templates/agents/seo-specialist.agent.md +0 -57
  137. package/templates/agents/seo-structure-architect.agent.md +0 -88
  138. package/templates/agents/service-mesh-expert.agent.md +0 -41
  139. package/templates/agents/sql-pro.agent.md +0 -146
  140. package/templates/agents/sre-engineer.agent.md +0 -58
  141. package/templates/agents/swift-expert.agent.md +0 -49
  142. package/templates/agents/task-distributor.agent.md +0 -47
  143. package/templates/agents/tdd-orchestrator.agent.md +0 -183
  144. package/templates/agents/technical-writer.agent.md +0 -48
  145. package/templates/agents/temporal-python-pro.agent.md +0 -349
  146. package/templates/agents/terraform-engineer.agent.md +0 -57
  147. package/templates/agents/terraform-specialist.agent.md +0 -137
  148. package/templates/agents/test-automator.agent.md +0 -203
  149. package/templates/agents/test-engineer.agent.md +0 -55
  150. package/templates/agents/threat-modeling-expert.agent.md +0 -44
  151. package/templates/agents/trend-analyst.agent.md +0 -47
  152. package/templates/agents/tutorial-engineer.agent.md +0 -118
  153. package/templates/agents/typescript-pro.agent.md +0 -48
  154. package/templates/agents/ui-designer.agent.md +0 -48
  155. package/templates/agents/ui-ux-designer.agent.md +0 -188
  156. package/templates/agents/ui-visual-validator.agent.md +0 -192
  157. package/templates/agents/ux-researcher.agent.md +0 -48
  158. package/templates/agents/vector-database-engineer.agent.md +0 -43
  159. package/templates/agents/vue-expert.agent.md +0 -48
  160. package/templates/agents/websocket-engineer.agent.md +0 -49
  161. package/templates/agents/workflow-orchestrator.agent.md +0 -48
  162. package/templates/skills/angular-migration/SKILL.md +0 -410
  163. package/templates/skills/api-design-principles/SKILL.md +0 -528
  164. package/templates/skills/api-design-principles/assets/api-design-checklist.md +0 -155
  165. package/templates/skills/api-design-principles/assets/rest-api-template.py +0 -182
  166. package/templates/skills/api-design-principles/references/graphql-schema-design.md +0 -583
  167. package/templates/skills/api-design-principles/references/rest-best-practices.md +0 -408
  168. package/templates/skills/architecture-decision-records/SKILL.md +0 -428
  169. package/templates/skills/architecture-patterns/SKILL.md +0 -494
  170. package/templates/skills/async-python-patterns/SKILL.md +0 -694
  171. package/templates/skills/auth-implementation-patterns/SKILL.md +0 -634
  172. package/templates/skills/changelog-automation/SKILL.md +0 -552
  173. package/templates/skills/code-review/SKILL.md +0 -62
  174. package/templates/skills/code-review-excellence/SKILL.md +0 -520
  175. package/templates/skills/competitive-landscape/SKILL.md +0 -479
  176. package/templates/skills/context-driven-development/SKILL.md +0 -385
  177. package/templates/skills/cost-optimization/SKILL.md +0 -274
  178. package/templates/skills/cqrs-implementation/SKILL.md +0 -554
  179. package/templates/skills/data-quality-frameworks/SKILL.md +0 -587
  180. package/templates/skills/data-storytelling/SKILL.md +0 -453
  181. package/templates/skills/database-migration/SKILL.md +0 -424
  182. package/templates/skills/dbt-transformation-patterns/SKILL.md +0 -561
  183. package/templates/skills/debugging-strategies/SKILL.md +0 -527
  184. package/templates/skills/defi-protocol-templates/SKILL.md +0 -454
  185. package/templates/skills/dependency-upgrade/SKILL.md +0 -409
  186. package/templates/skills/deployment-pipeline-design/SKILL.md +0 -359
  187. package/templates/skills/distributed-tracing/SKILL.md +0 -438
  188. package/templates/skills/dotnet-backend-patterns/SKILL.md +0 -815
  189. package/templates/skills/dotnet-backend-patterns/assets/repository-template.cs +0 -523
  190. package/templates/skills/dotnet-backend-patterns/assets/service-template.cs +0 -336
  191. package/templates/skills/dotnet-backend-patterns/references/dapper-patterns.md +0 -544
  192. package/templates/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +0 -355
  193. package/templates/skills/e2e-testing-patterns/SKILL.md +0 -547
  194. package/templates/skills/employment-contract-templates/SKILL.md +0 -507
  195. package/templates/skills/error-handling-patterns/SKILL.md +0 -636
  196. package/templates/skills/event-store-design/SKILL.md +0 -437
  197. package/templates/skills/fastapi-templates/SKILL.md +0 -567
  198. package/templates/skills/git-advanced-workflows/SKILL.md +0 -400
  199. package/templates/skills/github-actions-templates/SKILL.md +0 -333
  200. package/templates/skills/go-concurrency-patterns/SKILL.md +0 -655
  201. package/templates/skills/grafana-dashboards/SKILL.md +0 -369
  202. package/templates/skills/helm-chart-scaffolding/SKILL.md +0 -544
  203. package/templates/skills/helm-chart-scaffolding/assets/Chart.yaml.template +0 -42
  204. package/templates/skills/helm-chart-scaffolding/assets/values.yaml.template +0 -185
  205. package/templates/skills/helm-chart-scaffolding/references/chart-structure.md +0 -500
  206. package/templates/skills/helm-chart-scaffolding/scripts/validate-chart.sh +0 -244
  207. package/templates/skills/javascript-testing-patterns/SKILL.md +0 -1025
  208. package/templates/skills/langchain-architecture/SKILL.md +0 -338
  209. package/templates/skills/llm-evaluation/SKILL.md +0 -471
  210. package/templates/skills/microservices-patterns/SKILL.md +0 -595
  211. package/templates/skills/modern-javascript-patterns/SKILL.md +0 -911
  212. package/templates/skills/monorepo-management/SKILL.md +0 -622
  213. package/templates/skills/nextjs-app-router-patterns/SKILL.md +0 -544
  214. package/templates/skills/nodejs-backend-patterns/SKILL.md +0 -1020
  215. package/templates/skills/nx-workspace-patterns/SKILL.md +0 -452
  216. package/templates/skills/openapi-spec-generation/SKILL.md +0 -1028
  217. package/templates/skills/paypal-integration/SKILL.md +0 -467
  218. package/templates/skills/pci-compliance/SKILL.md +0 -466
  219. package/templates/skills/postgresql/SKILL.md +0 -204
  220. package/templates/skills/projection-patterns/SKILL.md +0 -490
  221. package/templates/skills/prometheus-configuration/SKILL.md +0 -392
  222. package/templates/skills/prompt-engineering-patterns/SKILL.md +0 -201
  223. package/templates/skills/prompt-engineering-patterns/assets/few-shot-examples.json +0 -106
  224. package/templates/skills/prompt-engineering-patterns/assets/prompt-template-library.md +0 -246
  225. package/templates/skills/prompt-engineering-patterns/references/chain-of-thought.md +0 -399
  226. package/templates/skills/prompt-engineering-patterns/references/few-shot-learning.md +0 -369
  227. package/templates/skills/prompt-engineering-patterns/references/prompt-optimization.md +0 -414
  228. package/templates/skills/prompt-engineering-patterns/references/prompt-templates.md +0 -470
  229. package/templates/skills/prompt-engineering-patterns/references/system-prompts.md +0 -189
  230. package/templates/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +0 -279
  231. package/templates/skills/python-packaging/SKILL.md +0 -870
  232. package/templates/skills/python-performance-optimization/SKILL.md +0 -869
  233. package/templates/skills/python-testing-patterns/SKILL.md +0 -907
  234. package/templates/skills/rag-implementation/SKILL.md +0 -403
  235. package/templates/skills/react-modernization/SKILL.md +0 -513
  236. package/templates/skills/react-native-architecture/SKILL.md +0 -671
  237. package/templates/skills/react-state-management/SKILL.md +0 -429
  238. package/templates/skills/risk-metrics-calculation/SKILL.md +0 -555
  239. package/templates/skills/rust-async-patterns/SKILL.md +0 -517
  240. package/templates/skills/secrets-management/SKILL.md +0 -346
  241. package/templates/skills/security-requirement-extraction/SKILL.md +0 -677
  242. package/templates/skills/security-review/SKILL.md +0 -78
  243. package/templates/skills/shellcheck-configuration/SKILL.md +0 -454
  244. package/templates/skills/similarity-search-patterns/SKILL.md +0 -558
  245. package/templates/skills/slo-implementation/SKILL.md +0 -329
  246. package/templates/skills/sql-optimization-patterns/SKILL.md +0 -493
  247. package/templates/skills/stripe-integration/SKILL.md +0 -442
  248. package/templates/skills/systematic-debugging/SKILL.md +0 -57
  249. package/templates/skills/tailwind-design-system/SKILL.md +0 -666
  250. package/templates/skills/temporal-python-testing/SKILL.md +0 -158
  251. package/templates/skills/temporal-python-testing/resources/integration-testing.md +0 -455
  252. package/templates/skills/temporal-python-testing/resources/local-setup.md +0 -553
  253. package/templates/skills/temporal-python-testing/resources/replay-testing.md +0 -462
  254. package/templates/skills/temporal-python-testing/resources/unit-testing.md +0 -328
  255. package/templates/skills/terraform-module-library/SKILL.md +0 -249
  256. package/templates/skills/terraform-module-library/references/aws-modules.md +0 -63
  257. package/templates/skills/test-driven-development/SKILL.md +0 -46
  258. package/templates/skills/threat-mitigation-mapping/SKILL.md +0 -745
  259. package/templates/skills/track-management/SKILL.md +0 -593
  260. package/templates/skills/typescript-advanced-types/SKILL.md +0 -717
  261. package/templates/skills/ui-ux-pro-max/SKILL.md +0 -352
  262. package/templates/skills/ui-ux-pro-max/data/charts.csv +0 -26
  263. package/templates/skills/ui-ux-pro-max/data/colors.csv +0 -97
  264. package/templates/skills/ui-ux-pro-max/data/icons.csv +0 -101
  265. package/templates/skills/ui-ux-pro-max/data/landing.csv +0 -31
  266. package/templates/skills/ui-ux-pro-max/data/products.csv +0 -97
  267. package/templates/skills/ui-ux-pro-max/data/prompts.csv +0 -24
  268. package/templates/skills/ui-ux-pro-max/data/react-performance.csv +0 -45
  269. package/templates/skills/ui-ux-pro-max/data/styles.csv +0 -59
  270. package/templates/skills/ui-ux-pro-max/data/typography.csv +0 -58
  271. package/templates/skills/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  272. package/templates/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  273. package/templates/skills/ui-ux-pro-max/data/web-interface.csv +0 -31
  274. package/templates/skills/ui-ux-pro-max/scripts/core.py +0 -258
  275. package/templates/skills/ui-ux-pro-max/scripts/design_system.py +0 -547
  276. package/templates/skills/ui-ux-pro-max/scripts/search.py +0 -76
  277. package/templates/skills/uv-package-manager/SKILL.md +0 -831
  278. package/templates/skills/vector-index-tuning/SKILL.md +0 -521
  279. package/templates/skills/wcag-audit-patterns/SKILL.md +0 -555
  280. package/templates/skills/workflow-orchestration-patterns/SKILL.md +0 -316
  281. package/templates/skills/workflow-patterns/SKILL.md +0 -623
  282. package/templates/skills/writing-plans/SKILL.md +0 -64
@@ -1,587 +0,0 @@
1
- ---
2
- name: data-quality-frameworks
3
- description: Implement data quality validation with Great Expectations, dbt tests, and data contracts. Use when building data quality pipelines, implementing validation rules, or establishing data contracts.
4
- ---
5
-
6
- # Data Quality Frameworks
7
-
8
- Production patterns for implementing data quality with Great Expectations, dbt tests, and data contracts to ensure reliable data pipelines.
9
-
10
- ## When to Use This Skill
11
-
12
- - Implementing data quality checks in pipelines
13
- - Setting up Great Expectations validation
14
- - Building comprehensive dbt test suites
15
- - Establishing data contracts between teams
16
- - Monitoring data quality metrics
17
- - Automating data validation in CI/CD
18
-
19
- ## Core Concepts
20
-
21
- ### 1. Data Quality Dimensions
22
-
23
- | Dimension | Description | Example Check |
24
- |-----------|-------------|---------------|
25
- | **Completeness** | No missing values | `expect_column_values_to_not_be_null` |
26
- | **Uniqueness** | No duplicates | `expect_column_values_to_be_unique` |
27
- | **Validity** | Values in expected range | `expect_column_values_to_be_in_set` |
28
- | **Accuracy** | Data matches reality | Cross-reference validation |
29
- | **Consistency** | No contradictions | `expect_column_pair_values_A_to_be_greater_than_B` |
30
- | **Timeliness** | Data is recent | `expect_column_max_to_be_between` |
31
-
32
- ### 2. Testing Pyramid for Data
33
-
34
- ```
35
- /\
36
- / \ Integration Tests (cross-table)
37
- /────\
38
- / \ Unit Tests (single column)
39
- /────────\
40
- / \ Schema Tests (structure)
41
- /────────────\
42
- ```
43
-
44
- ## Quick Start
45
-
46
- ### Great Expectations Setup
47
-
48
- ```bash
49
- # Install
50
- pip install great_expectations
51
-
52
- # Initialize project
53
- great_expectations init
54
-
55
- # Create datasource
56
- great_expectations datasource new
57
- ```
58
-
59
- ```python
60
- # great_expectations/checkpoints/daily_validation.yml
61
- import great_expectations as gx
62
-
63
- # Create context
64
- context = gx.get_context()
65
-
66
- # Create expectation suite
67
- suite = context.add_expectation_suite("orders_suite")
68
-
69
- # Add expectations
70
- suite.add_expectation(
71
- gx.expectations.ExpectColumnValuesToNotBeNull(column="order_id")
72
- )
73
- suite.add_expectation(
74
- gx.expectations.ExpectColumnValuesToBeUnique(column="order_id")
75
- )
76
-
77
- # Validate
78
- results = context.run_checkpoint(checkpoint_name="daily_orders")
79
- ```
80
-
81
- ## Patterns
82
-
83
- ### Pattern 1: Great Expectations Suite
84
-
85
- ```python
86
- # expectations/orders_suite.py
87
- import great_expectations as gx
88
- from great_expectations.core import ExpectationSuite
89
- from great_expectations.core.expectation_configuration import ExpectationConfiguration
90
-
91
- def build_orders_suite() -> ExpectationSuite:
92
- """Build comprehensive orders expectation suite"""
93
-
94
- suite = ExpectationSuite(expectation_suite_name="orders_suite")
95
-
96
- # Schema expectations
97
- suite.add_expectation(ExpectationConfiguration(
98
- expectation_type="expect_table_columns_to_match_set",
99
- kwargs={
100
- "column_set": ["order_id", "customer_id", "amount", "status", "created_at"],
101
- "exact_match": False # Allow additional columns
102
- }
103
- ))
104
-
105
- # Primary key
106
- suite.add_expectation(ExpectationConfiguration(
107
- expectation_type="expect_column_values_to_not_be_null",
108
- kwargs={"column": "order_id"}
109
- ))
110
- suite.add_expectation(ExpectationConfiguration(
111
- expectation_type="expect_column_values_to_be_unique",
112
- kwargs={"column": "order_id"}
113
- ))
114
-
115
- # Foreign key
116
- suite.add_expectation(ExpectationConfiguration(
117
- expectation_type="expect_column_values_to_not_be_null",
118
- kwargs={"column": "customer_id"}
119
- ))
120
-
121
- # Categorical values
122
- suite.add_expectation(ExpectationConfiguration(
123
- expectation_type="expect_column_values_to_be_in_set",
124
- kwargs={
125
- "column": "status",
126
- "value_set": ["pending", "processing", "shipped", "delivered", "cancelled"]
127
- }
128
- ))
129
-
130
- # Numeric ranges
131
- suite.add_expectation(ExpectationConfiguration(
132
- expectation_type="expect_column_values_to_be_between",
133
- kwargs={
134
- "column": "amount",
135
- "min_value": 0,
136
- "max_value": 100000,
137
- "strict_min": True # amount > 0
138
- }
139
- ))
140
-
141
- # Date validity
142
- suite.add_expectation(ExpectationConfiguration(
143
- expectation_type="expect_column_values_to_be_dateutil_parseable",
144
- kwargs={"column": "created_at"}
145
- ))
146
-
147
- # Freshness - data should be recent
148
- suite.add_expectation(ExpectationConfiguration(
149
- expectation_type="expect_column_max_to_be_between",
150
- kwargs={
151
- "column": "created_at",
152
- "min_value": {"$PARAMETER": "now - timedelta(days=1)"},
153
- "max_value": {"$PARAMETER": "now"}
154
- }
155
- ))
156
-
157
- # Row count sanity
158
- suite.add_expectation(ExpectationConfiguration(
159
- expectation_type="expect_table_row_count_to_be_between",
160
- kwargs={
161
- "min_value": 1000, # Expect at least 1000 rows
162
- "max_value": 10000000
163
- }
164
- ))
165
-
166
- # Statistical expectations
167
- suite.add_expectation(ExpectationConfiguration(
168
- expectation_type="expect_column_mean_to_be_between",
169
- kwargs={
170
- "column": "amount",
171
- "min_value": 50,
172
- "max_value": 500
173
- }
174
- ))
175
-
176
- return suite
177
- ```
178
-
179
- ### Pattern 2: Great Expectations Checkpoint
180
-
181
- ```yaml
182
- # great_expectations/checkpoints/orders_checkpoint.yml
183
- name: orders_checkpoint
184
- config_version: 1.0
185
- class_name: Checkpoint
186
- run_name_template: "%Y%m%d-%H%M%S-orders-validation"
187
-
188
- validations:
189
- - batch_request:
190
- datasource_name: warehouse
191
- data_connector_name: default_inferred_data_connector_name
192
- data_asset_name: orders
193
- data_connector_query:
194
- index: -1 # Latest batch
195
- expectation_suite_name: orders_suite
196
-
197
- action_list:
198
- - name: store_validation_result
199
- action:
200
- class_name: StoreValidationResultAction
201
-
202
- - name: store_evaluation_parameters
203
- action:
204
- class_name: StoreEvaluationParametersAction
205
-
206
- - name: update_data_docs
207
- action:
208
- class_name: UpdateDataDocsAction
209
-
210
- # Slack notification on failure
211
- - name: send_slack_notification
212
- action:
213
- class_name: SlackNotificationAction
214
- slack_webhook: ${SLACK_WEBHOOK}
215
- notify_on: failure
216
- renderer:
217
- module_name: great_expectations.render.renderer.slack_renderer
218
- class_name: SlackRenderer
219
- ```
220
-
221
- ```python
222
- # Run checkpoint
223
- import great_expectations as gx
224
-
225
- context = gx.get_context()
226
- result = context.run_checkpoint(checkpoint_name="orders_checkpoint")
227
-
228
- if not result.success:
229
- failed_expectations = [
230
- r for r in result.run_results.values()
231
- if not r.success
232
- ]
233
- raise ValueError(f"Data quality check failed: {failed_expectations}")
234
- ```
235
-
236
- ### Pattern 3: dbt Data Tests
237
-
238
- ```yaml
239
- # models/marts/core/_core__models.yml
240
- version: 2
241
-
242
- models:
243
- - name: fct_orders
244
- description: Order fact table
245
- tests:
246
- # Table-level tests
247
- - dbt_utils.recency:
248
- datepart: day
249
- field: created_at
250
- interval: 1
251
- - dbt_utils.at_least_one
252
- - dbt_utils.expression_is_true:
253
- expression: "total_amount >= 0"
254
-
255
- columns:
256
- - name: order_id
257
- description: Primary key
258
- tests:
259
- - unique
260
- - not_null
261
-
262
- - name: customer_id
263
- description: Foreign key to dim_customers
264
- tests:
265
- - not_null
266
- - relationships:
267
- to: ref('dim_customers')
268
- field: customer_id
269
-
270
- - name: order_status
271
- tests:
272
- - accepted_values:
273
- values: ['pending', 'processing', 'shipped', 'delivered', 'cancelled']
274
-
275
- - name: total_amount
276
- tests:
277
- - not_null
278
- - dbt_utils.expression_is_true:
279
- expression: ">= 0"
280
-
281
- - name: created_at
282
- tests:
283
- - not_null
284
- - dbt_utils.expression_is_true:
285
- expression: "<= current_timestamp"
286
-
287
- - name: dim_customers
288
- columns:
289
- - name: customer_id
290
- tests:
291
- - unique
292
- - not_null
293
-
294
- - name: email
295
- tests:
296
- - unique
297
- - not_null
298
- # Custom regex test
299
- - dbt_utils.expression_is_true:
300
- expression: "email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$'"
301
- ```
302
-
303
- ### Pattern 4: Custom dbt Tests
304
-
305
- ```sql
306
- -- tests/generic/test_row_count_in_range.sql
307
- {% test row_count_in_range(model, min_count, max_count) %}
308
-
309
- with row_count as (
310
- select count(*) as cnt from {{ model }}
311
- )
312
-
313
- select cnt
314
- from row_count
315
- where cnt < {{ min_count }} or cnt > {{ max_count }}
316
-
317
- {% endtest %}
318
-
319
- -- Usage in schema.yml:
320
- -- tests:
321
- -- - row_count_in_range:
322
- -- min_count: 1000
323
- -- max_count: 10000000
324
- ```
325
-
326
- ```sql
327
- -- tests/generic/test_sequential_values.sql
328
- {% test sequential_values(model, column_name, interval=1) %}
329
-
330
- with lagged as (
331
- select
332
- {{ column_name }},
333
- lag({{ column_name }}) over (order by {{ column_name }}) as prev_value
334
- from {{ model }}
335
- )
336
-
337
- select *
338
- from lagged
339
- where {{ column_name }} - prev_value != {{ interval }}
340
- and prev_value is not null
341
-
342
- {% endtest %}
343
- ```
344
-
345
- ```sql
346
- -- tests/singular/assert_orders_customers_match.sql
347
- -- Singular test: specific business rule
348
-
349
- with orders_customers as (
350
- select distinct customer_id from {{ ref('fct_orders') }}
351
- ),
352
-
353
- dim_customers as (
354
- select customer_id from {{ ref('dim_customers') }}
355
- ),
356
-
357
- orphaned_orders as (
358
- select o.customer_id
359
- from orders_customers o
360
- left join dim_customers c using (customer_id)
361
- where c.customer_id is null
362
- )
363
-
364
- select * from orphaned_orders
365
- -- Test passes if this returns 0 rows
366
- ```
367
-
368
- ### Pattern 5: Data Contracts
369
-
370
- ```yaml
371
- # contracts/orders_contract.yaml
372
- apiVersion: datacontract.com/v1.0.0
373
- kind: DataContract
374
- metadata:
375
- name: orders
376
- version: 1.0.0
377
- owner: data-platform-team
378
- contact: data-team@company.com
379
-
380
- info:
381
- title: Orders Data Contract
382
- description: Contract for order event data from the ecommerce platform
383
- purpose: Analytics, reporting, and ML features
384
-
385
- servers:
386
- production:
387
- type: snowflake
388
- account: company.us-east-1
389
- database: ANALYTICS
390
- schema: CORE
391
-
392
- terms:
393
- usage: Internal analytics only
394
- limitations: PII must not be exposed in downstream marts
395
- billing: Charged per query TB scanned
396
-
397
- schema:
398
- type: object
399
- properties:
400
- order_id:
401
- type: string
402
- format: uuid
403
- description: Unique order identifier
404
- required: true
405
- unique: true
406
- pii: false
407
-
408
- customer_id:
409
- type: string
410
- format: uuid
411
- description: Customer identifier
412
- required: true
413
- pii: true
414
- piiClassification: indirect
415
-
416
- total_amount:
417
- type: number
418
- minimum: 0
419
- maximum: 100000
420
- description: Order total in USD
421
-
422
- created_at:
423
- type: string
424
- format: date-time
425
- description: Order creation timestamp
426
- required: true
427
-
428
- status:
429
- type: string
430
- enum: [pending, processing, shipped, delivered, cancelled]
431
- description: Current order status
432
-
433
- quality:
434
- type: SodaCL
435
- specification:
436
- checks for orders:
437
- - row_count > 0
438
- - missing_count(order_id) = 0
439
- - duplicate_count(order_id) = 0
440
- - invalid_count(status) = 0:
441
- valid values: [pending, processing, shipped, delivered, cancelled]
442
- - freshness(created_at) < 24h
443
-
444
- sla:
445
- availability: 99.9%
446
- freshness: 1 hour
447
- latency: 5 minutes
448
- ```
449
-
450
- ### Pattern 6: Automated Quality Pipeline
451
-
452
- ```python
453
- # quality_pipeline.py
454
- from dataclasses import dataclass
455
- from typing import List, Dict, Any
456
- import great_expectations as gx
457
- from datetime import datetime
458
-
459
- @dataclass
460
- class QualityResult:
461
- table: str
462
- passed: bool
463
- total_expectations: int
464
- failed_expectations: int
465
- details: List[Dict[str, Any]]
466
- timestamp: datetime
467
-
468
- class DataQualityPipeline:
469
- """Orchestrate data quality checks across tables"""
470
-
471
- def __init__(self, context: gx.DataContext):
472
- self.context = context
473
- self.results: List[QualityResult] = []
474
-
475
- def validate_table(self, table: str, suite: str) -> QualityResult:
476
- """Validate a single table against expectation suite"""
477
-
478
- checkpoint_config = {
479
- "name": f"{table}_validation",
480
- "config_version": 1.0,
481
- "class_name": "Checkpoint",
482
- "validations": [{
483
- "batch_request": {
484
- "datasource_name": "warehouse",
485
- "data_asset_name": table,
486
- },
487
- "expectation_suite_name": suite,
488
- }],
489
- }
490
-
491
- result = self.context.run_checkpoint(**checkpoint_config)
492
-
493
- # Parse results
494
- validation_result = list(result.run_results.values())[0]
495
- results = validation_result.results
496
-
497
- failed = [r for r in results if not r.success]
498
-
499
- return QualityResult(
500
- table=table,
501
- passed=result.success,
502
- total_expectations=len(results),
503
- failed_expectations=len(failed),
504
- details=[{
505
- "expectation": r.expectation_config.expectation_type,
506
- "success": r.success,
507
- "observed_value": r.result.get("observed_value"),
508
- } for r in results],
509
- timestamp=datetime.now()
510
- )
511
-
512
- def run_all(self, tables: Dict[str, str]) -> Dict[str, QualityResult]:
513
- """Run validation for all tables"""
514
- results = {}
515
-
516
- for table, suite in tables.items():
517
- print(f"Validating {table}...")
518
- results[table] = self.validate_table(table, suite)
519
-
520
- return results
521
-
522
- def generate_report(self, results: Dict[str, QualityResult]) -> str:
523
- """Generate quality report"""
524
- report = ["# Data Quality Report", f"Generated: {datetime.now()}", ""]
525
-
526
- total_passed = sum(1 for r in results.values() if r.passed)
527
- total_tables = len(results)
528
-
529
- report.append(f"## Summary: {total_passed}/{total_tables} tables passed")
530
- report.append("")
531
-
532
- for table, result in results.items():
533
- status = "✅" if result.passed else "❌"
534
- report.append(f"### {status} {table}")
535
- report.append(f"- Expectations: {result.total_expectations}")
536
- report.append(f"- Failed: {result.failed_expectations}")
537
-
538
- if not result.passed:
539
- report.append("- Failed checks:")
540
- for detail in result.details:
541
- if not detail["success"]:
542
- report.append(f" - {detail['expectation']}: {detail['observed_value']}")
543
- report.append("")
544
-
545
- return "\n".join(report)
546
-
547
- # Usage
548
- context = gx.get_context()
549
- pipeline = DataQualityPipeline(context)
550
-
551
- tables_to_validate = {
552
- "orders": "orders_suite",
553
- "customers": "customers_suite",
554
- "products": "products_suite",
555
- }
556
-
557
- results = pipeline.run_all(tables_to_validate)
558
- report = pipeline.generate_report(results)
559
-
560
- # Fail pipeline if any table failed
561
- if not all(r.passed for r in results.values()):
562
- print(report)
563
- raise ValueError("Data quality checks failed!")
564
- ```
565
-
566
- ## Best Practices
567
-
568
- ### Do's
569
- - **Test early** - Validate source data before transformations
570
- - **Test incrementally** - Add tests as you find issues
571
- - **Document expectations** - Clear descriptions for each test
572
- - **Alert on failures** - Integrate with monitoring
573
- - **Version contracts** - Track schema changes
574
-
575
- ### Don'ts
576
- - **Don't test everything** - Focus on critical columns
577
- - **Don't ignore warnings** - They often precede failures
578
- - **Don't skip freshness** - Stale data is bad data
579
- - **Don't hardcode thresholds** - Use dynamic baselines
580
- - **Don't test in isolation** - Test relationships too
581
-
582
- ## Resources
583
-
584
- - [Great Expectations Documentation](https://docs.greatexpectations.io/)
585
- - [dbt Testing Documentation](https://docs.getdbt.com/docs/build/tests)
586
- - [Data Contract Specification](https://datacontract.com/)
587
- - [Soda Core](https://docs.soda.io/soda-core/overview.html)