datajunction 0.0.211__tar.gz → 0.0.212__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 (184) hide show
  1. {datajunction-0.0.211 → datajunction-0.0.212}/PKG-INFO +1 -1
  2. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/__about__.py +1 -1
  3. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/skills/datajunction-repo/SKILL.md +67 -2
  4. {datajunction-0.0.211 → datajunction-0.0.212}/.coveragerc +0 -0
  5. {datajunction-0.0.211 → datajunction-0.0.212}/.gitignore +0 -0
  6. {datajunction-0.0.211 → datajunction-0.0.212}/.pre-commit-config.yaml +0 -0
  7. {datajunction-0.0.211 → datajunction-0.0.212}/LICENSE.txt +0 -0
  8. {datajunction-0.0.211 → datajunction-0.0.212}/Makefile +0 -0
  9. {datajunction-0.0.211 → datajunction-0.0.212}/README.md +0 -0
  10. {datajunction-0.0.211 → datajunction-0.0.212}/claude_desktop_config.example.json +0 -0
  11. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/__init__.py +0 -0
  12. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/_base.py +0 -0
  13. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/_internal.py +0 -0
  14. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/admin.py +0 -0
  15. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/builder.py +0 -0
  16. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/cli.py +0 -0
  17. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/client.py +0 -0
  18. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/compile.py +0 -0
  19. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/deployment.py +0 -0
  20. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/exceptions.py +0 -0
  21. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/mcp/__init__.py +0 -0
  22. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/mcp/cli.py +0 -0
  23. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/mcp/config.py +0 -0
  24. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/models.py +0 -0
  25. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/nodes.py +0 -0
  26. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/rendering.py +0 -0
  27. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/init_system_nodes.py +0 -0
  28. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/date.yaml +0 -0
  29. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/deployment.yaml +0 -0
  30. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/dimension_link.yaml +0 -0
  31. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/distinct_node_authors.yaml +0 -0
  32. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/distinct_node_editors.yaml +0 -0
  33. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/dj.yaml +0 -0
  34. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/is_active.yaml +0 -0
  35. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/materialization.yaml +0 -0
  36. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/median_deployment_duration_seconds.yaml +0 -0
  37. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/median_dim_links_per_node.yaml +0 -0
  38. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/median_dimension_indegree.yaml +0 -0
  39. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/median_downstream_count.yaml +0 -0
  40. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/median_revisions_per_node.yaml +0 -0
  41. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/median_upstream_count.yaml +0 -0
  42. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/namespace.yaml +0 -0
  43. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/node_revision.yaml +0 -0
  44. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/node_type.yaml +0 -0
  45. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/nodes.yaml +0 -0
  46. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/number_of_branches.yaml +0 -0
  47. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/number_of_deployments.yaml +0 -0
  48. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/number_of_materializations.yaml +0 -0
  49. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/number_of_namespaces.yaml +0 -0
  50. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/number_of_nodes.yaml +0 -0
  51. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/number_of_orphan_nodes.yaml +0 -0
  52. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/number_of_unused_dimensions.yaml +0 -0
  53. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/repo.yaml +0 -0
  54. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/seed/nodes/user.yaml +0 -0
  55. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/skills/datajunction/SKILL.md +0 -0
  56. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/skills/datajunction-api/SKILL.md +0 -0
  57. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/skills/datajunction-query/SKILL.md +0 -0
  58. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/skills/datajunction-semantic-model/SKILL.md +0 -0
  59. {datajunction-0.0.211 → datajunction-0.0.212}/datajunction/tags.py +0 -0
  60. {datajunction-0.0.211 → datajunction-0.0.212}/pyproject.toml +0 -0
  61. {datajunction-0.0.211 → datajunction-0.0.212}/setup.cfg +0 -0
  62. {datajunction-0.0.211 → datajunction-0.0.212}/tests/__init__.py +0 -0
  63. {datajunction-0.0.211 → datajunction-0.0.212}/tests/conftest.py +0 -0
  64. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/deploy0/dj.yaml +0 -0
  65. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/deploy0/roads/companies.yaml +0 -0
  66. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/deploy0/roads/companies_dim.yaml +0 -0
  67. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/deploy0/roads/contractor.yaml +0 -0
  68. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/deploy0/roads/contractors.yaml +0 -0
  69. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/deploy0/roads/us_state.yaml +0 -0
  70. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/deploy0/roads/us_states.yaml +0 -0
  71. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/dj.yaml +0 -0
  72. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/avg_length_of_employment.metric.yaml +0 -0
  73. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/avg_repair_price.metric.yaml +0 -0
  74. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/avg_time_to_dispatch.metric.yaml +0 -0
  75. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/contractor.dimension.yaml +0 -0
  76. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/contractors.source.yaml +0 -0
  77. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/date.source.yaml +0 -0
  78. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/date_dim.dimension.yaml +0 -0
  79. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/dispatcher.dimension.yaml +0 -0
  80. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/dispatchers.source.yaml +0 -0
  81. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/hard_hat.dimension.yaml +0 -0
  82. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/hard_hat_state.source.yaml +0 -0
  83. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/hard_hats.source.yaml +0 -0
  84. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/local_hard_hats.dimension.yaml +0 -0
  85. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/municipality.source.yaml +0 -0
  86. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/municipality_dim.dimension.yaml +0 -0
  87. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/municipality_municipality_type.source.yaml +0 -0
  88. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/municipality_type.source.yaml +0 -0
  89. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/national_level_agg.transform.yaml +0 -0
  90. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/num_repair_orders.metric.yaml +0 -0
  91. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/regional_level_agg.transform.yaml +0 -0
  92. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/regional_repair_efficiency.metric.yaml +0 -0
  93. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/repair_order.dimension.yaml +0 -0
  94. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/repair_order_details.source.yaml +0 -0
  95. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/repair_order_transform.transform.yaml +0 -0
  96. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/repair_orders.source.yaml +0 -0
  97. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/repair_orders_cube.cube.yaml +0 -0
  98. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/repair_type.source.yaml +0 -0
  99. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/total_repair_cost.metric.yaml +0 -0
  100. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/total_repair_order_discounts.metric.yaml +0 -0
  101. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/us_region.source.yaml +0 -0
  102. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/us_state.dimension.yaml +0 -0
  103. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project1/roads/us_states.source.yaml +0 -0
  104. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project10/dj.yaml +0 -0
  105. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/avg_length_of_employment.metric.yaml +0 -0
  106. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/avg_repair_price.metric.yaml +0 -0
  107. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/avg_time_to_dispatch.metric.yaml +0 -0
  108. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/contractor.dimension.yaml +0 -0
  109. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/contractors.source.yaml +0 -0
  110. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/date.source.yaml +0 -0
  111. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/date_dim.dimension.yaml +0 -0
  112. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/dispatcher.dimension.yaml +0 -0
  113. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/dispatchers.source.yaml +0 -0
  114. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/dj.yaml +0 -0
  115. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/hard_hat.dimension.yaml +0 -0
  116. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/hard_hat_state.source.yaml +0 -0
  117. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/hard_hats.source.yaml +0 -0
  118. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/local_hard_hats.dimension.yaml +0 -0
  119. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/municipality.source.yaml +0 -0
  120. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/municipality_dim.dimension.yaml +0 -0
  121. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/municipality_municipality_type.source.yaml +0 -0
  122. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/municipality_type.source.yaml +0 -0
  123. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/national_level_agg.transform.yaml +0 -0
  124. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/num_repair_orders.metric.yaml +0 -0
  125. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/regional_level_agg.transform.yaml +0 -0
  126. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/regional_repair_efficiency.metric.yaml +0 -0
  127. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/repair_order.dimension.yaml +0 -0
  128. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/repair_order_details.source.yaml +0 -0
  129. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/repair_order_transform.transform.yaml +0 -0
  130. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/repair_orders.source.yaml +0 -0
  131. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/repair_orders_cube.cube.yaml +0 -0
  132. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/repair_type.source.yaml +0 -0
  133. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/total_repair_cost.metric.yaml +0 -0
  134. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/total_repair_order_discounts.metric.yaml +0 -0
  135. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/us_region.source.yaml +0 -0
  136. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/us_state.dimension.yaml +0 -0
  137. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project11/us_states.source.yaml +0 -0
  138. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project12/dj.yaml +0 -0
  139. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project12/roads/companies.source.yaml +0 -0
  140. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project12/roads/companies_dim.dimension.yaml +0 -0
  141. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project12/roads/contractor.dimension.yaml +0 -0
  142. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project12/roads/contractors.source.yaml +0 -0
  143. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project12/roads/us_state.dimension.yaml +0 -0
  144. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project12/roads/us_states.source.yaml +0 -0
  145. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project2/dj.yaml +0 -0
  146. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project2/some_node.source.yaml +0 -0
  147. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project3/dj.yaml +0 -0
  148. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project3/some_node.yaml +0 -0
  149. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project4/dj.yaml +0 -0
  150. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project4/very/very/deeply/nested/namespace/some_node.source.yaml +0 -0
  151. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project5/dj.yaml +0 -0
  152. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project5/some_node.a.b.c.source.yaml +0 -0
  153. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project6/dj.yaml +0 -0
  154. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project6/roads/contractor.dimension.yaml +0 -0
  155. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project6/roads/contractors.source.yaml +0 -0
  156. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project7/dj.yaml +0 -0
  157. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project7/roads/contractor.dimension.yaml +0 -0
  158. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project7/roads/contractors.source.yaml +0 -0
  159. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project8/dj.yaml +0 -0
  160. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project9/dj.yaml +0 -0
  161. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project9/roads/companies.source.yaml +0 -0
  162. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project9/roads/companies_dim.dimension.yaml +0 -0
  163. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project9/roads/contractor.dimension.yaml +0 -0
  164. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project9/roads/contractors.source.yaml +0 -0
  165. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project9/roads/us_state.dimension.yaml +0 -0
  166. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples/project9/roads/us_states.source.yaml +0 -0
  167. {datajunction-0.0.211 → datajunction-0.0.212}/tests/examples.py +0 -0
  168. {datajunction-0.0.211 → datajunction-0.0.212}/tests/mcp/README.md +0 -0
  169. {datajunction-0.0.211 → datajunction-0.0.212}/tests/mcp/__init__.py +0 -0
  170. {datajunction-0.0.211 → datajunction-0.0.212}/tests/mcp/test_cli.py +0 -0
  171. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test__internal.py +0 -0
  172. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_admin.py +0 -0
  173. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_base.py +0 -0
  174. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_builder.py +0 -0
  175. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_cli.py +0 -0
  176. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_client.py +0 -0
  177. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_compile.py +0 -0
  178. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_deploy.py +0 -0
  179. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_generated_client.py +0 -0
  180. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_integration.py +0 -0
  181. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_models.py +0 -0
  182. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_plugin_mirror.py +0 -0
  183. {datajunction-0.0.211 → datajunction-0.0.212}/tests/test_skills.py +0 -0
  184. {datajunction-0.0.211 → datajunction-0.0.212}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datajunction
3
- Version: 0.0.211
3
+ Version: 0.0.212
4
4
  Summary: DataJunction client library for connecting to a DataJunction server
5
5
  Project-URL: repository, https://github.com/DataJunction/dj
6
6
  Author-email: DataJunction Authors <yian.shang@gmail.com>
@@ -2,4 +2,4 @@
2
2
  Version for Hatch
3
3
  """
4
4
 
5
- __version__ = "0.0.211"
5
+ __version__ = "0.0.212"
@@ -3,8 +3,9 @@ name: datajunction-repo
3
3
  description: |
4
4
  Activate this skill when authoring DataJunction (DJ) nodes via YAML files
5
5
  in a git repository — the repo-backed workflow. Covers YAML schemas per
6
- node type, branch-based development, temporal partitions on cubes, and
7
- the full PR-driven deployment flow. For modeling decisions (how to
6
+ node type, branch-based development, temporal partitions on cubes,
7
+ registering pre-aggregations / aggregate awareness, and the full
8
+ PR-driven deployment flow. For modeling decisions (how to
8
9
  structure metrics, decomposition workflow), invoke `datajunction-semantic-model`.
9
10
  For direct API authoring, invoke `datajunction-api`. For concepts,
10
11
  invoke `datajunction`.
@@ -16,6 +17,13 @@ description: |
16
17
  - create metric, create dimension, create cube, build cube
17
18
  - temporal partition, partition pushdown
18
19
  - pre-commit, push.sh
20
+ - pre-aggregation, pre-agg, preagg, kind: preagg
21
+ - aggregate awareness, aggregate navigation, query routing
22
+ - external pre-aggregation, externally-built aggregate, registered aggregate
23
+ - multiple tables for a metric, fact table and agg table, fact/agg hierarchy
24
+ - summary table, rollup table, agg table, materialized aggregate
25
+ - measure_columns, dimension_columns, valid_through_ts, availability
26
+ - freshness, join back, retained key
19
27
  user-invocable: false
20
28
  ---
21
29
 
@@ -557,6 +565,63 @@ columns:
557
565
 
558
566
  ---
559
567
 
568
+ ## Pre-Aggregations / Aggregate Awareness
569
+
570
+ One concept, many names — all of these mean the same thing: **aggregate awareness**,
571
+ **aggregate navigation**, **query routing**, **pre-aggregations** / **pre-aggs**,
572
+ **external** or **registered aggregates**, **multiple tables for a metric** (a raw
573
+ fact table plus coarser aggregates), **summary tables**, **rollup tables**, **agg
574
+ tables**, **materialized aggregates**, **fact/agg hierarchy**, **last-mile** and
575
+ **intermediate aggregates**.
576
+
577
+ A metric is defined once against its fact table; the same numbers often exist
578
+ pre-summed in coarser tables. Register those tables and DJ picks per query which to
579
+ read, falling back to the fact table when no aggregate can answer correctly.
580
+
581
+ **The rules live in the docs, not here** — see
582
+ [Query Routing & Aggregate Awareness](https://datajunction.io/docs/0.1.0/dj-concepts/query-routing-aggregate-awareness/)
583
+ for the `kind: preagg` schema, `measure_columns` / `dimension_columns`, what makes a
584
+ metric mappable, role-qualified dimension references, freshness reporting, and the
585
+ current limitations. Read it before registering anything; the rules that decide
586
+ whether your table actually gets used are not guessable.
587
+
588
+ ### The one thing to get right before you author metrics
589
+
590
+ `measure_columns` maps a **metric to one column**, so a metric decomposing into more
591
+ than one component can never be bound to an aggregate — and its components are
592
+ auto-named with a hash suffix that YAML cannot address. `SUM(revenue) /
593
+ COUNT(DISTINCT view_id)` as a single node is unmappable forever; fixing it means
594
+ refactoring a node other teams may already query.
595
+
596
+ So **give every aggregation primitive its own metric node** and compose ratios as
597
+ derived metrics referencing them. Free if done from the start, expensive to retrofit,
598
+ worth doing even before an aggregate table exists.
599
+
600
+ ### Repo-specific traps
601
+
602
+ **Declare partitions in YAML, never through the API.** A temporal partition on the
603
+ parent's date column is what lets DJ reason about when an aggregate's data ends:
604
+
605
+ ```yaml
606
+ columns:
607
+ - name: activity_date
608
+ type: int
609
+ partition:
610
+ type: temporal
611
+ granularity: day
612
+ format: yyyyMMdd
613
+ ```
614
+
615
+ `POST /nodes/{node}/columns/{col}/partition/` works, but the next deploy recreates
616
+ the node from YAML and reverts it — and without a temporal partition column,
617
+ freshness checks have no axis and silently do nothing.
618
+
619
+ **A parent-node edit strands its aggregates.** Registrations are keyed by node
620
+ revision, so even a description-only change re-registers them at a new revision. A
621
+ repo deploy re-creates the binding, but **availability is not restored** — until the
622
+ pipeline re-reports it, the aggregate is unused and every query silently reverts to
623
+ the fact table.
624
+
560
625
  ## Complete Workflow Example
561
626
 
562
627
  **Scenario**: Add a new metric to the finance namespace.
File without changes
File without changes
File without changes
File without changes