datajunction-ui 0.0.1-rc.8 → 0.0.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 (205) hide show
  1. package/.env +2 -0
  2. package/.prettierignore +3 -1
  3. package/Makefile +9 -0
  4. package/dj-logo.svg +10 -0
  5. package/package.json +53 -14
  6. package/public/favicon.ico +0 -0
  7. package/public/index.html +1 -1
  8. package/src/__tests__/reportWebVitals.test.jsx +44 -0
  9. package/src/app/__tests__/__snapshots__/index.test.tsx.snap +5 -109
  10. package/src/app/components/AddNodeDropdown.jsx +44 -0
  11. package/src/app/components/ListGroupItem.jsx +9 -1
  12. package/src/app/components/NamespaceHeader.jsx +4 -13
  13. package/src/app/components/NodeListActions.jsx +69 -0
  14. package/src/app/components/NodeMaterializationDelete.jsx +90 -0
  15. package/src/app/components/QueryInfo.jsx +172 -0
  16. package/src/app/components/Search.jsx +94 -0
  17. package/src/app/components/Tab.jsx +8 -1
  18. package/src/app/components/ToggleSwitch.jsx +20 -0
  19. package/src/app/components/__tests__/NodeListActions.test.jsx +94 -0
  20. package/src/app/components/__tests__/QueryInfo.test.jsx +55 -0
  21. package/src/app/components/__tests__/Search.test.jsx +63 -0
  22. package/src/app/components/__tests__/Tab.test.jsx +27 -0
  23. package/src/app/components/__tests__/ToggleSwitch.test.jsx +43 -0
  24. package/src/app/components/__tests__/__snapshots__/ListGroupItem.test.tsx.snap +8 -3
  25. package/src/app/components/__tests__/__snapshots__/NamespaceHeader.test.jsx.snap +2 -18
  26. package/src/app/components/djgraph/Collapse.jsx +47 -0
  27. package/src/app/components/djgraph/DJNode.jsx +61 -83
  28. package/src/app/components/djgraph/DJNodeColumns.jsx +75 -0
  29. package/src/app/components/djgraph/DJNodeDimensions.jsx +75 -0
  30. package/src/app/components/djgraph/LayoutFlow.jsx +106 -0
  31. package/src/app/components/djgraph/__tests__/Collapse.test.jsx +51 -0
  32. package/src/app/components/djgraph/__tests__/DJNodeColumns.test.jsx +83 -0
  33. package/src/app/components/djgraph/__tests__/DJNodeDimensions.test.jsx +118 -0
  34. package/src/app/components/djgraph/__tests__/__snapshots__/DJNode.test.tsx.snap +84 -40
  35. package/src/app/components/forms/Action.jsx +8 -0
  36. package/src/app/components/forms/NodeNameField.jsx +64 -0
  37. package/src/app/components/search.css +17 -0
  38. package/src/app/constants.js +2 -0
  39. package/src/app/icons/AddItemIcon.jsx +16 -0
  40. package/src/app/icons/AlertIcon.jsx +33 -0
  41. package/src/app/icons/CollapsedIcon.jsx +15 -0
  42. package/src/app/icons/CommitIcon.jsx +45 -0
  43. package/src/app/icons/DJLogo.jsx +36 -0
  44. package/src/app/icons/DeleteIcon.jsx +21 -0
  45. package/src/app/icons/DiffIcon.jsx +63 -0
  46. package/src/app/icons/EditIcon.jsx +18 -0
  47. package/src/app/icons/ExpandedIcon.jsx +15 -0
  48. package/src/app/icons/EyeIcon.jsx +20 -0
  49. package/src/app/icons/FilterIcon.jsx +7 -0
  50. package/src/app/icons/HorizontalHierarchyIcon.jsx +15 -0
  51. package/src/app/icons/InvalidIcon.jsx +16 -0
  52. package/src/app/icons/JupyterExportIcon.jsx +25 -0
  53. package/src/app/icons/LoadingIcon.jsx +14 -0
  54. package/src/app/icons/NodeIcon.jsx +49 -0
  55. package/src/app/icons/PythonIcon.jsx +14 -0
  56. package/src/app/icons/TableIcon.jsx +14 -0
  57. package/src/app/icons/ValidIcon.jsx +16 -0
  58. package/src/app/index.tsx +118 -37
  59. package/src/app/pages/AddEditNodePage/AlertMessage.jsx +10 -0
  60. package/src/app/pages/AddEditNodePage/ColumnsSelect.jsx +84 -0
  61. package/src/app/pages/AddEditNodePage/DescriptionField.jsx +17 -0
  62. package/src/app/pages/AddEditNodePage/DisplayNameField.jsx +16 -0
  63. package/src/app/pages/AddEditNodePage/FormikSelect.jsx +51 -0
  64. package/src/app/pages/AddEditNodePage/FullNameField.jsx +38 -0
  65. package/src/app/pages/AddEditNodePage/Loadable.jsx +20 -0
  66. package/src/app/pages/AddEditNodePage/MetricMetadataFields.jsx +75 -0
  67. package/src/app/pages/AddEditNodePage/MetricQueryField.jsx +71 -0
  68. package/src/app/pages/AddEditNodePage/NamespaceField.jsx +40 -0
  69. package/src/app/pages/AddEditNodePage/NodeModeField.jsx +14 -0
  70. package/src/app/pages/AddEditNodePage/NodeQueryField.jsx +94 -0
  71. package/src/app/pages/AddEditNodePage/OwnersField.jsx +54 -0
  72. package/src/app/pages/AddEditNodePage/RequiredDimensionsSelect.jsx +54 -0
  73. package/src/app/pages/AddEditNodePage/TagsField.jsx +47 -0
  74. package/src/app/pages/AddEditNodePage/UpstreamNodeField.jsx +49 -0
  75. package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormFailed.test.jsx +109 -0
  76. package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormSuccess.test.jsx +287 -0
  77. package/src/app/pages/AddEditNodePage/__tests__/FormikSelect.test.jsx +75 -0
  78. package/src/app/pages/AddEditNodePage/__tests__/FullNameField.test.jsx +31 -0
  79. package/src/app/pages/AddEditNodePage/__tests__/NodeQueryField.test.jsx +30 -0
  80. package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/AddEditNodePageFormFailed.test.jsx.snap +54 -0
  81. package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/AddEditNodePageFormSuccess.test.jsx.snap +3 -0
  82. package/src/app/pages/AddEditNodePage/__tests__/__snapshots__/index.test.jsx.snap +3 -0
  83. package/src/app/pages/AddEditNodePage/__tests__/index.test.jsx +224 -0
  84. package/src/app/pages/AddEditNodePage/index.jsx +506 -0
  85. package/src/app/pages/AddEditTagPage/Loadable.jsx +16 -0
  86. package/src/app/pages/AddEditTagPage/__tests__/AddEditTagPage.test.jsx +107 -0
  87. package/src/app/pages/AddEditTagPage/index.jsx +132 -0
  88. package/src/app/pages/CubeBuilderPage/DimensionsSelect.jsx +152 -0
  89. package/src/app/pages/CubeBuilderPage/Loadable.jsx +16 -0
  90. package/src/app/pages/CubeBuilderPage/MetricsSelect.jsx +75 -0
  91. package/src/app/pages/CubeBuilderPage/__tests__/index.test.jsx +373 -0
  92. package/src/app/pages/CubeBuilderPage/index.jsx +291 -0
  93. package/src/app/pages/LoginPage/LoginForm.jsx +124 -0
  94. package/src/app/pages/LoginPage/SignupForm.jsx +156 -0
  95. package/src/app/pages/LoginPage/__tests__/index.test.jsx +97 -0
  96. package/src/app/pages/LoginPage/assets/sign-in-with-github.png +0 -0
  97. package/src/app/pages/LoginPage/assets/sign-in-with-google.png +0 -0
  98. package/src/app/pages/LoginPage/index.jsx +17 -0
  99. package/src/app/pages/NamespacePage/AddNamespacePopover.jsx +85 -0
  100. package/src/app/pages/NamespacePage/Explorer.jsx +61 -0
  101. package/src/app/pages/NamespacePage/FieldControl.jsx +21 -0
  102. package/src/app/pages/NamespacePage/NodeTypeSelect.jsx +30 -0
  103. package/src/app/pages/NamespacePage/TagSelect.jsx +44 -0
  104. package/src/app/pages/NamespacePage/UserSelect.jsx +47 -0
  105. package/src/app/pages/NamespacePage/__tests__/index.test.jsx +297 -0
  106. package/src/app/pages/NamespacePage/index.jsx +319 -42
  107. package/src/app/pages/NodePage/AddBackfillPopover.jsx +165 -0
  108. package/src/app/pages/NodePage/AddMaterializationPopover.jsx +222 -0
  109. package/src/app/pages/NodePage/AvailabilityStateBlock.jsx +67 -0
  110. package/src/app/pages/NodePage/ClientCodePopover.jsx +94 -0
  111. package/src/app/pages/NodePage/DimensionFilter.jsx +86 -0
  112. package/src/app/pages/NodePage/EditColumnDescriptionPopover.jsx +116 -0
  113. package/src/app/pages/NodePage/EditColumnPopover.jsx +116 -0
  114. package/src/app/pages/NodePage/LinkDimensionPopover.jsx +164 -0
  115. package/src/app/pages/NodePage/MaterializationConfigField.jsx +60 -0
  116. package/src/app/pages/NodePage/NodeColumnTab.jsx +256 -30
  117. package/src/app/pages/NodePage/NodeDependenciesTab.jsx +153 -0
  118. package/src/app/pages/NodePage/NodeGraphTab.jsx +123 -150
  119. package/src/app/pages/NodePage/NodeHistory.jsx +236 -0
  120. package/src/app/pages/NodePage/NodeInfoTab.jsx +325 -49
  121. package/src/app/pages/NodePage/NodeLineageTab.jsx +84 -0
  122. package/src/app/pages/NodePage/NodeMaterializationTab.jsx +585 -0
  123. package/src/app/pages/NodePage/NodeRevisionMaterializationTab.jsx +58 -0
  124. package/src/app/pages/NodePage/NodeStatus.jsx +100 -31
  125. package/src/app/pages/NodePage/NodeValidateTab.jsx +367 -0
  126. package/src/app/pages/NodePage/NodesWithDimension.jsx +42 -0
  127. package/src/app/pages/NodePage/NotebookDownload.jsx +36 -0
  128. package/src/app/pages/NodePage/PartitionColumnPopover.jsx +151 -0
  129. package/src/app/pages/NodePage/PartitionValueForm.jsx +60 -0
  130. package/src/app/pages/NodePage/RevisionDiff.jsx +209 -0
  131. package/src/app/pages/NodePage/WatchNodeButton.jsx +226 -0
  132. package/src/app/pages/NodePage/__tests__/AddBackfillPopover.test.jsx +56 -0
  133. package/src/app/pages/NodePage/__tests__/AddMaterializationPopover.test.jsx +87 -0
  134. package/src/app/pages/NodePage/__tests__/DimensionFilter.test.jsx +74 -0
  135. package/src/app/pages/NodePage/__tests__/EditColumnDescriptionPopover.test.jsx +149 -0
  136. package/src/app/pages/NodePage/__tests__/EditColumnPopover.test.jsx +148 -0
  137. package/src/app/pages/NodePage/__tests__/LinkDimensionPopover.test.jsx +161 -0
  138. package/src/app/pages/NodePage/__tests__/NodeColumnTab.test.jsx +166 -0
  139. package/src/app/pages/NodePage/__tests__/NodeDependenciesTab.test.jsx +151 -0
  140. package/src/app/pages/NodePage/__tests__/NodeGraphTab.test.jsx +595 -0
  141. package/src/app/pages/NodePage/__tests__/NodeLineageTab.test.jsx +58 -0
  142. package/src/app/pages/NodePage/__tests__/NodeMaterializationTab.test.jsx +190 -0
  143. package/src/app/pages/NodePage/__tests__/NodePage.test.jsx +872 -0
  144. package/src/app/pages/NodePage/__tests__/NodeWithDimension.test.jsx +175 -0
  145. package/src/app/pages/NodePage/__tests__/RevisionDiff.test.jsx +164 -0
  146. package/src/app/pages/NodePage/__tests__/__snapshots__/NodePage.test.jsx.snap +19 -0
  147. package/src/app/pages/NodePage/index.jsx +190 -44
  148. package/src/app/pages/NotFoundPage/__tests__/index.test.jsx +16 -0
  149. package/src/app/pages/OverviewPage/ByStatusPanel.jsx +69 -0
  150. package/src/app/pages/OverviewPage/DimensionNodeUsagePanel.jsx +48 -0
  151. package/src/app/pages/OverviewPage/GovernanceWarningsPanel.jsx +107 -0
  152. package/src/app/pages/OverviewPage/Loadable.jsx +16 -0
  153. package/src/app/pages/OverviewPage/NodesByTypePanel.jsx +63 -0
  154. package/src/app/pages/OverviewPage/OverviewPanel.jsx +94 -0
  155. package/src/app/pages/OverviewPage/TrendsPanel.jsx +66 -0
  156. package/src/app/pages/OverviewPage/__tests__/ByStatusPanel.test.jsx +36 -0
  157. package/src/app/pages/OverviewPage/__tests__/DimensionNodeUsagePanel.test.jsx +76 -0
  158. package/src/app/pages/OverviewPage/__tests__/GovernanceWarningsPanel.test.jsx +77 -0
  159. package/src/app/pages/OverviewPage/__tests__/NodesByTypePanel.test.jsx +86 -0
  160. package/src/app/pages/OverviewPage/__tests__/OverviewPanel.test.jsx +78 -0
  161. package/src/app/pages/OverviewPage/__tests__/TrendsPanel.test.jsx +120 -0
  162. package/src/app/pages/OverviewPage/__tests__/index.test.jsx +54 -0
  163. package/src/app/pages/OverviewPage/index.jsx +22 -0
  164. package/src/app/pages/RegisterTablePage/Loadable.jsx +16 -0
  165. package/src/app/pages/RegisterTablePage/__tests__/RegisterTablePage.test.jsx +110 -0
  166. package/src/app/pages/RegisterTablePage/__tests__/__snapshots__/RegisterTablePage.test.jsx.snap +38 -0
  167. package/src/app/pages/RegisterTablePage/index.jsx +142 -0
  168. package/src/app/pages/Root/__tests__/index.test.jsx +79 -0
  169. package/src/app/pages/Root/index.tsx +84 -6
  170. package/src/app/pages/SQLBuilderPage/Loadable.jsx +16 -0
  171. package/src/app/pages/SQLBuilderPage/__tests__/index.test.jsx +173 -0
  172. package/src/app/pages/SQLBuilderPage/index.jsx +390 -0
  173. package/src/app/pages/TagPage/Loadable.jsx +16 -0
  174. package/src/app/pages/TagPage/__tests__/TagPage.test.jsx +70 -0
  175. package/src/app/pages/TagPage/index.jsx +79 -0
  176. package/src/app/services/DJService.js +1314 -21
  177. package/src/app/services/__tests__/DJService.test.jsx +1559 -0
  178. package/src/index.tsx +1 -0
  179. package/src/mocks/mockNodes.jsx +1474 -0
  180. package/src/setupTests.ts +31 -1
  181. package/src/styles/dag.css +117 -5
  182. package/src/styles/index.css +1027 -30
  183. package/src/styles/loading.css +34 -0
  184. package/src/styles/login.css +81 -0
  185. package/src/styles/node-creation.scss +276 -0
  186. package/src/styles/node-list.css +4 -0
  187. package/src/styles/overview.css +72 -0
  188. package/src/styles/sorted-table.css +15 -0
  189. package/src/styles/styles.scss +44 -0
  190. package/src/styles/styles.scss.d.ts +9 -0
  191. package/src/utils/form.jsx +23 -0
  192. package/webpack.config.js +16 -6
  193. package/.babelrc +0 -4
  194. package/.env.local +0 -4
  195. package/.env.production +0 -1
  196. package/.github/pull_request_template.md +0 -11
  197. package/.github/workflows/ci.yml +0 -33
  198. package/.vscode/extensions.json +0 -7
  199. package/.vscode/launch.json +0 -15
  200. package/.vscode/settings.json +0 -25
  201. package/Dockerfile +0 -7
  202. package/src/app/pages/ListNamespacesPage/Loadable.jsx +0 -14
  203. package/src/app/pages/ListNamespacesPage/index.jsx +0 -62
  204. package/src/app/pages/NamespacePage/__tests__/__snapshots__/index.test.tsx.snap +0 -45
  205. package/src/app/pages/NamespacePage/__tests__/index.test.tsx +0 -14
@@ -0,0 +1,1474 @@
1
+ export const mocks = {
2
+ metricMetadata: {
3
+ directions: ['higher_is_better', 'lower_is_better', 'neutral'],
4
+ units: [
5
+ { name: 'dollar', label: 'Dollar' },
6
+ { name: 'second', label: 'Second' },
7
+ ],
8
+ },
9
+ mockTransformNode: {
10
+ namespace: 'default',
11
+ node_revision_id: 15,
12
+ node_id: 15,
13
+ type: 'transform',
14
+ name: 'default.repair_order_transform',
15
+ display_name: 'Default: Repair Order Transform',
16
+ version: 'v1.0',
17
+ status: 'valid',
18
+ mode: 'published',
19
+ catalog: {
20
+ name: 'warehouse',
21
+ engines: [],
22
+ },
23
+ schema_: null,
24
+ table: null,
25
+ description: 'Repair order dimension',
26
+ query:
27
+ 'SELECT repair_order_id, municipality_id, hard_hat_id, dispatcher_id FROM default.repair_orders',
28
+ availability: null,
29
+ columns: [
30
+ {
31
+ name: 'repair_order_id',
32
+ display_name: 'Repair Order Id',
33
+ type: 'int',
34
+ attributes: [],
35
+ dimension: null,
36
+ partition: null,
37
+ },
38
+ {
39
+ name: 'municipality_id',
40
+ display_name: 'Municipality Id',
41
+ type: 'string',
42
+ attributes: [],
43
+ dimension: null,
44
+ partition: {
45
+ type_: 'categorical',
46
+ },
47
+ },
48
+ ],
49
+ updated_at: '2024-01-24T16:39:14.029366+00:00',
50
+ materializations: [],
51
+ parents: [
52
+ {
53
+ name: 'default.repair_orders',
54
+ },
55
+ ],
56
+ metric_metadata: null,
57
+ dimension_links: [],
58
+ created_at: '2024-01-24T16:39:14.028077+00:00',
59
+ tags: [],
60
+ owners: [{ username: 'dj' }],
61
+ current_version: 'v1.0',
62
+ missing_table: false,
63
+ },
64
+ mockMetricNode: {
65
+ namespace: 'default',
66
+ node_revision_id: 23,
67
+ node_id: 23,
68
+ type: 'metric',
69
+ name: 'default.num_repair_orders',
70
+ display_name: 'Default: Num Repair Orders',
71
+ version: 'v1.0',
72
+ status: 'valid',
73
+ mode: 'published',
74
+ catalog: {
75
+ id: 1,
76
+ uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
77
+ created_at: '2023-08-21T16:48:51.146121+00:00',
78
+ updated_at: '2023-08-21T16:48:51.146122+00:00',
79
+ extra_params: {},
80
+ name: 'warehouse',
81
+ },
82
+ schema_: null,
83
+ table: null,
84
+ description: 'Number of repair orders',
85
+ query:
86
+ 'SELECT count(repair_order_id) default_DOT_num_repair_orders FROM default.repair_orders',
87
+ availability: null,
88
+ columns: [
89
+ {
90
+ name: 'default_DOT_num_repair_orders',
91
+ type: 'bigint',
92
+ display_name: 'Default DOT num repair orders',
93
+ attributes: [],
94
+ dimension: null,
95
+ partition: null,
96
+ },
97
+ ],
98
+ primary_key: ['repair_order_id', 'country'],
99
+ updated_at: '2023-08-21T16:48:56.841704+00:00',
100
+ materializations: [],
101
+ parents: [
102
+ {
103
+ name: 'default.repair_orders',
104
+ },
105
+ ],
106
+ created_at: '2023-08-21T16:48:56.841631+00:00',
107
+ tags: [{ name: 'purpose', display_name: 'Purpose' }],
108
+ owners: [{ username: 'dj' }],
109
+ dimension_links: [],
110
+ incompatible_druid_functions: ['IF'],
111
+ dimensions: [
112
+ {
113
+ value: 'default.date_dim.dateint',
114
+ label: 'default.date_dim.dateint (timestamp)',
115
+ },
116
+ {
117
+ value: 'default.date_dim.dateint',
118
+ label: 'default.date_dim.dateint (timestamp)',
119
+ },
120
+ {
121
+ value: 'default.date_dim.day',
122
+ label: 'default.date_dim.day (int)',
123
+ },
124
+ {
125
+ value: 'default.date_dim.day',
126
+ label: 'default.date_dim.day (int)',
127
+ },
128
+ {
129
+ value: 'default.date_dim.month',
130
+ label: 'default.date_dim.month (int)',
131
+ },
132
+ {
133
+ value: 'default.date_dim.month',
134
+ label: 'default.date_dim.month (int)',
135
+ },
136
+ {
137
+ value: 'default.date_dim.year',
138
+ label: 'default.date_dim.year (int)',
139
+ },
140
+ {
141
+ value: 'default.date_dim.year',
142
+ label: 'default.date_dim.year (int)',
143
+ },
144
+ {
145
+ value: 'default.dispatcher.company_name',
146
+ label: 'default.dispatcher.company_name (string)',
147
+ },
148
+ {
149
+ value: 'default.dispatcher.dispatcher_id',
150
+ label: 'default.dispatcher.dispatcher_id (int)',
151
+ },
152
+ {
153
+ value: 'default.dispatcher.phone',
154
+ label: 'default.dispatcher.phone (string)',
155
+ },
156
+ {
157
+ value: 'default.hard_hat.address',
158
+ label: 'default.hard_hat.address (string)',
159
+ },
160
+ {
161
+ value: 'default.hard_hat.birth_date',
162
+ label: 'default.hard_hat.birth_date (date)',
163
+ },
164
+ {
165
+ value: 'default.hard_hat.city',
166
+ label: 'default.hard_hat.city (string)',
167
+ },
168
+ {
169
+ value: 'default.hard_hat.contractor_id',
170
+ label: 'default.hard_hat.contractor_id (int)',
171
+ },
172
+ {
173
+ value: 'default.hard_hat.country',
174
+ label: 'default.hard_hat.country (string)',
175
+ },
176
+ {
177
+ value: 'default.hard_hat.first_name',
178
+ label: 'default.hard_hat.first_name (string)',
179
+ },
180
+ {
181
+ value: 'default.hard_hat.hard_hat_id',
182
+ label: 'default.hard_hat.hard_hat_id (int)',
183
+ },
184
+ {
185
+ value: 'default.hard_hat.hire_date',
186
+ label: 'default.hard_hat.hire_date (date)',
187
+ },
188
+ {
189
+ value: 'default.hard_hat.last_name',
190
+ label: 'default.hard_hat.last_name (string)',
191
+ },
192
+ {
193
+ value: 'default.hard_hat.manager',
194
+ label: 'default.hard_hat.manager (int)',
195
+ },
196
+ {
197
+ value: 'default.hard_hat.postal_code',
198
+ label: 'default.hard_hat.postal_code (string)',
199
+ },
200
+ {
201
+ value: 'default.hard_hat.state',
202
+ label: 'default.hard_hat.state (string)',
203
+ },
204
+ {
205
+ value: 'default.hard_hat.title',
206
+ label: 'default.hard_hat.title (string)',
207
+ },
208
+ {
209
+ value: 'default.municipality_dim.contact_name',
210
+ label: 'default.municipality_dim.contact_name (string)',
211
+ },
212
+ {
213
+ value: 'default.municipality_dim.contact_title',
214
+ label: 'default.municipality_dim.contact_title (string)',
215
+ },
216
+ {
217
+ value: 'default.municipality_dim.local_region',
218
+ label: 'default.municipality_dim.local_region (string)',
219
+ },
220
+ {
221
+ value: 'default.municipality_dim.municipality_id',
222
+ label: 'default.municipality_dim.municipality_id (string)',
223
+ },
224
+ {
225
+ value: 'default.municipality_dim.municipality_type_desc',
226
+ label: 'default.municipality_dim.municipality_type_desc (string)',
227
+ },
228
+ {
229
+ value: 'default.municipality_dim.municipality_type_id',
230
+ label: 'default.municipality_dim.municipality_type_id (string)',
231
+ },
232
+ {
233
+ value: 'default.municipality_dim.state_id',
234
+ label: 'default.municipality_dim.state_id (int)',
235
+ },
236
+ {
237
+ value: 'default.repair_order.dispatcher_id',
238
+ label: 'default.repair_order.dispatcher_id (int)',
239
+ },
240
+ {
241
+ value: 'default.repair_order.hard_hat_id',
242
+ label: 'default.repair_order.hard_hat_id (int)',
243
+ },
244
+ {
245
+ value: 'default.repair_order.municipality_id',
246
+ label: 'default.repair_order.municipality_id (string)',
247
+ },
248
+ {
249
+ value: 'default.repair_order.repair_order_id',
250
+ label: 'default.repair_order.repair_order_id (int)',
251
+ },
252
+ {
253
+ value: 'default.repair_order_details.repair_order_id',
254
+ label: 'default.repair_order_details.repair_order_id (int)',
255
+ },
256
+ {
257
+ value: 'default.us_state.state_abbr',
258
+ label: 'default.us_state.state_abbr (string)',
259
+ },
260
+ {
261
+ value: 'default.us_state.state_id',
262
+ label: 'default.us_state.state_id (int)',
263
+ },
264
+ {
265
+ value: 'default.us_state.state_name',
266
+ label: 'default.us_state.state_name (string)',
267
+ },
268
+ {
269
+ value: 'default.us_state.state_region',
270
+ label: 'default.us_state.state_region (int)',
271
+ },
272
+ {
273
+ value: 'default.us_state.state_region_description',
274
+ label: 'default.us_state.state_region_description (string)',
275
+ },
276
+ ],
277
+ metric_metadata: {
278
+ unit: {
279
+ name: 'unitless',
280
+ label: 'Unitless',
281
+ },
282
+ direction: 'neutral',
283
+ max_decimal_exponent: null,
284
+ min_decimal_exponent: null,
285
+ significant_digits: 4,
286
+ },
287
+ upstream_node: 'default.repair_orders',
288
+ expression: 'count(repair_order_id)',
289
+ aggregate_expression: 'count(repair_order_id)',
290
+ required_dimensions: [],
291
+ },
292
+
293
+ mockGetSourceNode: {
294
+ name: 'default.num_repair_orders',
295
+ type: 'SOURCE',
296
+ current: {
297
+ displayName: 'source.prodhive.dse.playback_f',
298
+ description:
299
+ 'This source node was automatically created as a registered table.',
300
+ primaryKey: [],
301
+ parents: [],
302
+ metricMetadata: null,
303
+ requiredDimensions: [],
304
+ mode: 'PUBLISHED',
305
+ },
306
+ tags: [],
307
+ owners: [{ username: 'dj' }],
308
+ },
309
+
310
+ mockGetMetricNode: {
311
+ name: 'default.num_repair_orders',
312
+ type: 'METRIC',
313
+ current: {
314
+ displayName: 'Default: Num Repair Orders',
315
+ description: 'Number of repair orders',
316
+ primaryKey: ['repair_order_id', 'country'],
317
+ query:
318
+ 'SELECT count(repair_order_id) default_DOT_num_repair_orders FROM default.repair_orders',
319
+ parents: [
320
+ {
321
+ name: 'default.repair_orders',
322
+ },
323
+ ],
324
+ metricMetadata: {
325
+ direction: 'NEUTRAL',
326
+ unit: {
327
+ name: 'UNITLESS',
328
+ },
329
+ expression: 'count(repair_order_id)',
330
+ significantDigits: 5,
331
+ incompatibleDruidFunctions: ['IF'],
332
+ },
333
+ requiredDimensions: [],
334
+ mode: 'PUBLISHED',
335
+ },
336
+ tags: [{ name: 'purpose', displayName: 'Purpose' }],
337
+ owners: [{ username: 'dj' }],
338
+ },
339
+
340
+ mockGetTransformNode: {
341
+ name: 'default.repair_order_transform',
342
+ type: 'TRANSFORM',
343
+ current: {
344
+ displayName: 'Default: Repair Order Transform',
345
+ description: 'Repair order dimension',
346
+ primaryKey: [],
347
+ query:
348
+ 'SELECT repair_order_id, municipality_id, hard_hat_id, dispatcher_id FROM default.repair_orders',
349
+ parents: [
350
+ {
351
+ name: 'default.repair_orders',
352
+ },
353
+ ],
354
+ metricMetadata: null,
355
+ requiredDimensions: [],
356
+ mode: 'PUBLISHED',
357
+ },
358
+ tags: [],
359
+ owners: [{ username: 'dj' }],
360
+ },
361
+
362
+ attributes: [
363
+ {
364
+ uniqueness_scope: [],
365
+ namespace: 'system',
366
+ id: 3,
367
+ name: 'primary_key',
368
+ description:
369
+ 'Points to a column which is part of the primary key of the node',
370
+ allowed_node_types: ['source', 'transform', 'dimension'],
371
+ },
372
+ {
373
+ uniqueness_scope: [],
374
+ namespace: 'system',
375
+ id: 4,
376
+ name: 'dimension',
377
+ description: 'Points to a dimension attribute column',
378
+ allowed_node_types: ['source', 'transform'],
379
+ },
380
+ ],
381
+ dimensions: [
382
+ 'default.date_dim',
383
+ 'default.repair_order',
384
+ 'default.contractor',
385
+ 'default.hard_hat',
386
+ 'default.local_hard_hats',
387
+ 'default.us_state',
388
+ 'default.dispatcher',
389
+ 'default.municipality_dim',
390
+ 'default.etests',
391
+ 'default.special_forces_contractors',
392
+ ],
393
+ metricNodeColumns: [
394
+ {
395
+ name: 'default_DOT_avg_repair_price',
396
+ type: 'double',
397
+ display_name: 'Default DOT avg repair price',
398
+ attributes: [],
399
+ dimension: null,
400
+ partition: null,
401
+ },
402
+ ],
403
+ metricNodeHistory: [
404
+ {
405
+ id: 1,
406
+ entity_type: 'node',
407
+ entity_name: 'default.avg_repair_price',
408
+ node: 'default.avg_repair_price',
409
+ activity_type: 'create',
410
+ user: null,
411
+ pre: {},
412
+ post: {},
413
+ details: {},
414
+ created_at: '2023-08-21T16:48:56.950482+00:00',
415
+ },
416
+ {
417
+ id: 2,
418
+ entity_type: 'column_attribute',
419
+ entity_name: 'default.avg_repair_price',
420
+ node: 'default.avg_repair_price',
421
+ activity_type: 'set_attribute',
422
+ user: null,
423
+ pre: {},
424
+ post: {},
425
+ details: {
426
+ column: 'col1',
427
+ attributes: [{ name: 'primary_key' }, { name: 'dimension' }],
428
+ },
429
+ created_at: '2023-08-21T16:48:56.950482+00:00',
430
+ },
431
+ {
432
+ id: 3,
433
+ entity_type: 'link',
434
+ entity_name: 'default.avg_repair_price',
435
+ node: 'default.avg_repair_price',
436
+ activity_type: 'create',
437
+ user: null,
438
+ pre: {},
439
+ post: {},
440
+ details: {
441
+ column: 'col1',
442
+ dimension: 'default.hard_hat',
443
+ dimension_column: 'hard_hat_id',
444
+ },
445
+ created_at: '2023-08-21T16:48:56.950482+00:00',
446
+ },
447
+ {
448
+ id: 4,
449
+ entity_type: 'materialization',
450
+ entity_name: 'default.avg_repair_price',
451
+ node: 'default.avg_repair_price',
452
+ activity_type: 'create',
453
+ user: null,
454
+ pre: {},
455
+ post: {},
456
+ details: {
457
+ materialization: 'some_random_materialization',
458
+ },
459
+ created_at: '2023-08-21T16:48:56.950482+00:00',
460
+ },
461
+ {
462
+ id: 5,
463
+ entity_type: 'availability',
464
+ entity_name: 'default.avg_repair_price',
465
+ node: 'default.avg_repair_price',
466
+ activity_type: 'create',
467
+ user: null,
468
+ pre: {},
469
+ post: {},
470
+ details: {
471
+ materialization: 'some_random_materialization',
472
+ },
473
+ created_at: '2023-08-21T16:48:56.950482+00:00',
474
+ },
475
+ {
476
+ id: 6,
477
+ entity_type: 'node',
478
+ entity_name: 'default.avg_repair_price',
479
+ node: 'default.avg_repair_price',
480
+ activity_type: 'status_change',
481
+ user: null,
482
+ pre: { status: 'valid' },
483
+ post: { status: 'invalid' },
484
+ details: {
485
+ upstream_node: 'default.repair_order_details',
486
+ },
487
+ created_at: '2023-08-21T16:48:56.950482+00:00',
488
+ },
489
+ {
490
+ id: 7,
491
+ entity_type: 'backfill',
492
+ entity_name: 'default.avg_repair_price',
493
+ node: 'default.avg_repair_price',
494
+ activity_type: 'create',
495
+ user: null,
496
+ pre: { status: 'valid' },
497
+ post: { status: 'invalid' },
498
+ details: {
499
+ materialization: 'druid_metrics_cube__incremental_time__xyz',
500
+ partition: [
501
+ {
502
+ column_name: 'xyz.abc',
503
+ values: null,
504
+ range: ['20240201', '20240301'],
505
+ },
506
+ ],
507
+ },
508
+ created_at: '2023-08-21T16:48:56.950482+00:00',
509
+ },
510
+ {
511
+ id: 8,
512
+ entity_type: 'node',
513
+ entity_name: 'default.avg_repair_price',
514
+ node: 'default.avg_repair_price',
515
+ activity_type: 'tag',
516
+ user: null,
517
+ pre: {},
518
+ post: {},
519
+ details: {
520
+ tags: ['a', 'b'],
521
+ },
522
+ created_at: '2023-08-21T16:48:56.950482+00:00',
523
+ },
524
+ {
525
+ id: 9,
526
+ entity_type: 'link',
527
+ entity_name: 'default.avg_repair_price',
528
+ node: 'default.avg_repair_price',
529
+ activity_type: 'create',
530
+ user: null,
531
+ pre: {},
532
+ post: {},
533
+ details: {
534
+ dimension: 'abcde',
535
+ },
536
+ created_at: '2023-08-21T16:48:56.950482+00:00',
537
+ },
538
+ ],
539
+ nodeMaterializations: [
540
+ {
541
+ backfills: [
542
+ {
543
+ spec: [
544
+ {
545
+ column_name: 'default_DOT_hard_hat_DOT_hire_date',
546
+ values: null,
547
+ range: ['20230101', '20230102'],
548
+ },
549
+ ],
550
+ urls: ['a', 'b'],
551
+ },
552
+ ],
553
+ name: 'country_birth_date_contractor_id_379232101',
554
+ engine: { name: 'spark', version: '2.4.4', uri: null, dialect: 'spark' },
555
+ config: {
556
+ spark: {},
557
+ query:
558
+ "SELECT default_DOT_hard_hats.address,\n\tdefault_DOT_hard_hats.birth_date,\n\tdefault_DOT_hard_hats.city,\n\tdefault_DOT_hard_hats.contractor_id,\n\tdefault_DOT_hard_hats.country,\n\tdefault_DOT_hard_hats.first_name,\n\tdefault_DOT_hard_hats.hard_hat_id,\n\tdefault_DOT_hard_hats.hire_date,\n\tdefault_DOT_hard_hats.last_name,\n\tdefault_DOT_hard_hats.manager,\n\tdefault_DOT_hard_hats.postal_code,\n\tdefault_DOT_hard_hats.state,\n\tdefault_DOT_hard_hats.title \n FROM roads.hard_hats AS default_DOT_hard_hats \n WHERE default_DOT_hard_hats.country IN ('DE', 'MY') AND default_DOT_hard_hats.contractor_id BETWEEN 1 AND 10\n\n",
559
+ upstream_tables: ['default.roads.hard_hats'],
560
+ },
561
+ strategy: 'incremental_time',
562
+ schedule: '0 * * * *',
563
+ job: 'SparkSqlMaterializationJob',
564
+ output_tables: ['common.a', 'common.b'],
565
+ urls: ['http://fake.url/job'],
566
+ clientCode: '',
567
+ },
568
+ ],
569
+ metricNodeRevisions: [
570
+ {
571
+ node_revision_id: 24,
572
+ node_id: 24,
573
+ type: 'metric',
574
+ name: 'default.avg_repair_price',
575
+ display_name: 'Default: Avg Repair Price',
576
+ version: 'v1.0',
577
+ status: 'valid',
578
+ mode: 'published',
579
+ catalog: {
580
+ id: 1,
581
+ uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
582
+ created_at: '2023-08-21T16:48:51.146121+00:00',
583
+ updated_at: '2023-08-21T16:48:51.146122+00:00',
584
+ extra_params: {},
585
+ name: 'warehouse',
586
+ },
587
+ schema_: null,
588
+ table: null,
589
+ description: 'Average repair price',
590
+ query:
591
+ 'SELECT avg(price) default_DOT_avg_repair_price \n FROM default.repair_order_details\n\n',
592
+ availability: null,
593
+ columns: [
594
+ {
595
+ name: 'default_DOT_avg_repair_price',
596
+ type: 'double',
597
+ display_name: 'Default DOT avg repair price',
598
+ attributes: [],
599
+ dimension: null,
600
+ },
601
+ ],
602
+ updated_at: '2023-08-21T16:48:56.932231+00:00',
603
+ materializations: [],
604
+ parents: [
605
+ {
606
+ name: 'default.repair_order_details',
607
+ },
608
+ ],
609
+ },
610
+ ],
611
+ mockCubeNode: {
612
+ namespace: 'default',
613
+ node_revision_id: 33,
614
+ node_id: 33,
615
+ type: 'cube',
616
+ name: 'default.repair_orders_cube',
617
+ display_name: 'Default: Repair Orders Cube',
618
+ version: 'v1.0',
619
+ status: 'valid',
620
+ mode: 'published',
621
+ catalog: {
622
+ id: 1,
623
+ uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
624
+ created_at: '2023-08-21T16:48:51.146121+00:00',
625
+ updated_at: '2023-08-21T16:48:51.146122+00:00',
626
+ extra_params: {},
627
+ name: 'warehouse',
628
+ },
629
+ schema_: null,
630
+ table: null,
631
+ description: 'Repair Orders Cube',
632
+ query: 'SELECT ...',
633
+ availability: null,
634
+ columns: [
635
+ {
636
+ name: 'default_DOT_num_repair_orders',
637
+ type: 'bigint',
638
+ display_name: 'Default DOT num repair orders',
639
+ attributes: [],
640
+ dimension: null,
641
+ },
642
+ {
643
+ name: 'default_DOT_avg_repair_price',
644
+ type: 'double',
645
+ display_name: 'Default DOT avg repair price',
646
+ attributes: [],
647
+ dimension: null,
648
+ },
649
+ {
650
+ name: 'default_DOT_total_repair_cost',
651
+ type: 'double',
652
+ display_name: 'Default DOT total repair cost',
653
+ attributes: [],
654
+ dimension: null,
655
+ },
656
+ {
657
+ name: 'default_DOT_total_repair_order_discounts',
658
+ type: 'double',
659
+ display_name: 'Default DOT total repair order discounts',
660
+ attributes: [],
661
+ dimension: null,
662
+ },
663
+ {
664
+ name: 'company_name',
665
+ type: 'string',
666
+ display_name: 'Company Name',
667
+ attributes: [
668
+ {
669
+ attribute_type: {
670
+ namespace: 'system',
671
+ name: 'dimension',
672
+ },
673
+ },
674
+ ],
675
+ dimension: null,
676
+ },
677
+ {
678
+ name: 'state',
679
+ type: 'string',
680
+ attributes: [
681
+ {
682
+ attribute_type: {
683
+ namespace: 'system',
684
+ name: 'dimension',
685
+ },
686
+ },
687
+ ],
688
+ dimension: null,
689
+ },
690
+ ],
691
+ updated_at: '2023-08-21T16:49:02.040424+00:00',
692
+ materializations: [
693
+ {
694
+ name: 'default',
695
+ engine: {
696
+ name: 'duckdb',
697
+ version: '0.7.1',
698
+ uri: null,
699
+ dialect: null,
700
+ },
701
+ config: {
702
+ partitions: [],
703
+ spark: null,
704
+ query: 'SELECT',
705
+ upstream_tables: [
706
+ 'warehouse.roads.dispatchers',
707
+ 'warehouse.roads.hard_hats',
708
+ 'warehouse.roads.repair_order_details',
709
+ 'warehouse.roads.repair_orders',
710
+ ],
711
+ dimensions: ['company_name', 'state'],
712
+ measures: {
713
+ default_DOT_num_repair_orders: {
714
+ metric: 'default_DOT_num_repair_orders',
715
+ measures: [
716
+ {
717
+ name: 'repair_order_id_count',
718
+ field_name:
719
+ 'm0_default_DOT_num_repair_orders_repair_order_id_count',
720
+ agg: 'count',
721
+ type: 'bigint',
722
+ },
723
+ ],
724
+ combiner: 'count(repair_order_id_count)',
725
+ },
726
+ default_DOT_avg_repair_price: {
727
+ metric: 'default_DOT_avg_repair_price',
728
+ measures: [
729
+ {
730
+ name: 'price_count',
731
+ field_name: 'm1_default_DOT_avg_repair_price_price_count',
732
+ agg: 'count',
733
+ type: 'bigint',
734
+ },
735
+ {
736
+ name: 'price_sum',
737
+ field_name: 'm1_default_DOT_avg_repair_price_price_sum',
738
+ agg: 'sum',
739
+ type: 'double',
740
+ },
741
+ ],
742
+ combiner: 'sum(price_sum) / count(price_count)',
743
+ },
744
+ default_DOT_total_repair_cost: {
745
+ metric: 'default_DOT_total_repair_cost',
746
+ measures: [
747
+ {
748
+ name: 'price_sum',
749
+ field_name: 'm2_default_DOT_total_repair_cost_price_sum',
750
+ agg: 'sum',
751
+ type: 'double',
752
+ },
753
+ ],
754
+ combiner: 'sum(price_sum)',
755
+ },
756
+ default_DOT_total_repair_order_discounts: {
757
+ metric: 'default_DOT_total_repair_order_discounts',
758
+ measures: [
759
+ {
760
+ name: 'price_discount_sum',
761
+ field_name:
762
+ 'm3_default_DOT_total_repair_order_discounts_price_discount_sum',
763
+ agg: 'sum',
764
+ type: 'double',
765
+ },
766
+ ],
767
+ combiner: 'sum(price_discount_sum)',
768
+ },
769
+ },
770
+ },
771
+ schedule: '@daily',
772
+ job: 'DefaultCubeMaterialization',
773
+ },
774
+ ],
775
+ parents: [
776
+ {
777
+ name: 'default.hard_hat',
778
+ },
779
+ {
780
+ name: 'default.dispatcher',
781
+ },
782
+ {
783
+ name: 'default.num_repair_orders',
784
+ },
785
+ {
786
+ name: 'default.avg_repair_price',
787
+ },
788
+ {
789
+ name: 'default.total_repair_cost',
790
+ },
791
+ {
792
+ name: 'default.total_repair_order_discounts',
793
+ },
794
+ ],
795
+ created_at: '2023-08-21T16:49:01.671395+00:00',
796
+ tags: [],
797
+ owners: [{ username: 'dj' }],
798
+ },
799
+ mockCubesCube: {
800
+ node_revision_id: 33,
801
+ node_id: 33,
802
+ type: 'cube',
803
+ name: 'default.repair_orders_cube',
804
+ display_name: 'Default: Repair Orders Cube',
805
+ version: 'v1.0',
806
+ description: 'Repair Orders Cube',
807
+ availability: null,
808
+ cube_elements: [
809
+ {
810
+ name: 'default_DOT_num_repair_orders',
811
+ node_name: 'default.num_repair_orders',
812
+ type: 'metric',
813
+ },
814
+ {
815
+ name: 'default_DOT_avg_repair_price',
816
+ node_name: 'default.avg_repair_price',
817
+ type: 'metric',
818
+ },
819
+ {
820
+ name: 'default_DOT_total_repair_cost',
821
+ node_name: 'default.total_repair_cost',
822
+ type: 'metric',
823
+ },
824
+ {
825
+ name: 'default_DOT_total_repair_order_discounts',
826
+ node_name: 'default.total_repair_order_discounts',
827
+ type: 'metric',
828
+ },
829
+ {
830
+ name: 'state',
831
+ node_name: 'default.hard_hat',
832
+ type: 'dimension',
833
+ },
834
+ {
835
+ name: 'company_name',
836
+ node_name: 'default.dispatcher',
837
+ type: 'dimension',
838
+ },
839
+ ],
840
+ query: 'SELECT',
841
+ columns: [
842
+ {
843
+ name: 'default_DOT_num_repair_orders',
844
+ type: 'bigint',
845
+ attributes: [],
846
+ dimension: null,
847
+ },
848
+ {
849
+ name: 'default_DOT_avg_repair_price',
850
+ type: 'double',
851
+ attributes: [],
852
+ dimension: null,
853
+ },
854
+ {
855
+ name: 'default_DOT_total_repair_cost',
856
+ type: 'double',
857
+ attributes: [],
858
+ dimension: null,
859
+ },
860
+ {
861
+ name: 'default_DOT_total_repair_order_discounts',
862
+ type: 'double',
863
+ attributes: [],
864
+ dimension: null,
865
+ },
866
+ {
867
+ name: 'company_name',
868
+ type: 'string',
869
+ attributes: [
870
+ {
871
+ attribute_type: {
872
+ namespace: 'system',
873
+ name: 'dimension',
874
+ },
875
+ },
876
+ ],
877
+ dimension: null,
878
+ },
879
+ {
880
+ name: 'state',
881
+ type: 'string',
882
+ attributes: [
883
+ {
884
+ attribute_type: {
885
+ namespace: 'system',
886
+ name: 'dimension',
887
+ },
888
+ },
889
+ ],
890
+ dimension: null,
891
+ },
892
+ ],
893
+ updated_at: '2023-08-21T16:49:02.040424+00:00',
894
+ materializations: [
895
+ {
896
+ name: 'default',
897
+ engine: {
898
+ name: 'duckdb',
899
+ version: '0.7.1',
900
+ uri: null,
901
+ dialect: null,
902
+ },
903
+ config: {
904
+ partitions: [],
905
+ spark: null,
906
+ query: 'SELECT',
907
+ upstream_tables: [
908
+ 'warehouse.roads.dispatchers',
909
+ 'warehouse.roads.hard_hats',
910
+ 'warehouse.roads.repair_order_details',
911
+ 'warehouse.roads.repair_orders',
912
+ ],
913
+ dimensions: ['company_name', 'state'],
914
+ measures: {
915
+ default_DOT_num_repair_orders: {
916
+ metric: 'default_DOT_num_repair_orders',
917
+ measures: [
918
+ {
919
+ name: 'repair_order_id_count',
920
+ field_name:
921
+ 'm0_default_DOT_num_repair_orders_repair_order_id_count',
922
+ agg: 'count',
923
+ type: 'bigint',
924
+ },
925
+ ],
926
+ combiner: 'count(repair_order_id_count)',
927
+ },
928
+ default_DOT_avg_repair_price: {
929
+ metric: 'default_DOT_avg_repair_price',
930
+ measures: [
931
+ {
932
+ name: 'price_count',
933
+ field_name: 'm1_default_DOT_avg_repair_price_price_count',
934
+ agg: 'count',
935
+ type: 'bigint',
936
+ },
937
+ {
938
+ name: 'price_sum',
939
+ field_name: 'm1_default_DOT_avg_repair_price_price_sum',
940
+ agg: 'sum',
941
+ type: 'double',
942
+ },
943
+ ],
944
+ combiner: 'sum(price_sum) / count(price_count)',
945
+ },
946
+ default_DOT_total_repair_cost: {
947
+ metric: 'default_DOT_total_repair_cost',
948
+ measures: [
949
+ {
950
+ name: 'price_sum',
951
+ field_name: 'm2_default_DOT_total_repair_cost_price_sum',
952
+ agg: 'sum',
953
+ type: 'double',
954
+ },
955
+ ],
956
+ combiner: 'sum(price_sum)',
957
+ },
958
+ default_DOT_total_repair_order_discounts: {
959
+ metric: 'default_DOT_total_repair_order_discounts',
960
+ measures: [
961
+ {
962
+ name: 'price_discount_sum',
963
+ field_name:
964
+ 'm3_default_DOT_total_repair_order_discounts_price_discount_sum',
965
+ agg: 'sum',
966
+ type: 'double',
967
+ },
968
+ ],
969
+ combiner: 'sum(price_discount_sum)',
970
+ },
971
+ },
972
+ },
973
+ schedule: '@daily',
974
+ job: 'DefaultCubeMaterialization',
975
+ },
976
+ ],
977
+ },
978
+ mockNodeLineage: [
979
+ {
980
+ column_name: 'default_DOT_avg_repair_price',
981
+ node_name: 'default.avg_repair_price',
982
+ node_type: 'metric',
983
+ display_name: 'Default: Avg Repair Price',
984
+ lineage: [
985
+ {
986
+ column_name: 'price',
987
+ node_name: 'default.repair_order_details',
988
+ node_type: 'source',
989
+ display_name: 'Default: Repair Order Details',
990
+ lineage: [],
991
+ },
992
+ ],
993
+ },
994
+ ],
995
+ mockMetricNodeJson: {
996
+ name: 'default.num_repair_orders',
997
+ current: {
998
+ parents: [
999
+ {
1000
+ name: 'default.repair_orders',
1001
+ },
1002
+ ],
1003
+ metricMetadata: {
1004
+ direction: null,
1005
+ unit: null,
1006
+ expression: 'count(repair_order_id)',
1007
+ incompatibleDruidFunctions: [],
1008
+ },
1009
+ requiredDimensions: [],
1010
+ },
1011
+ },
1012
+ mockNodeDAG: [
1013
+ {
1014
+ namespace: 'default',
1015
+ node_revision_id: 2,
1016
+ node_id: 2,
1017
+ type: 'source',
1018
+ name: 'default.repair_order_details',
1019
+ display_name: 'Default: Repair Order Details',
1020
+ version: 'v1.0',
1021
+ status: 'valid',
1022
+ mode: 'published',
1023
+ catalog: {
1024
+ id: 1,
1025
+ uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
1026
+ created_at: '2023-08-21T16:48:51.146121+00:00',
1027
+ updated_at: '2023-08-21T16:48:51.146122+00:00',
1028
+ extra_params: {},
1029
+ name: 'warehouse',
1030
+ },
1031
+ schema_: 'roads',
1032
+ table: 'repair_order_details',
1033
+ description: 'Details on repair orders',
1034
+ query: null,
1035
+ availability: null,
1036
+ columns: [
1037
+ {
1038
+ name: 'repair_order_id',
1039
+ type: 'int',
1040
+ display_name: 'Repair Order Id',
1041
+ attributes: [],
1042
+ dimension: {
1043
+ name: 'default.repair_order',
1044
+ },
1045
+ },
1046
+ {
1047
+ name: 'repair_type_id',
1048
+ type: 'int',
1049
+ display_name: 'Repair Type Id',
1050
+ attributes: [],
1051
+ dimension: null,
1052
+ },
1053
+ {
1054
+ name: 'price',
1055
+ type: 'float',
1056
+ display_name: 'Price',
1057
+ attributes: [],
1058
+ dimension: null,
1059
+ },
1060
+ {
1061
+ name: 'quantity',
1062
+ type: 'int',
1063
+ display_name: 'Quantity',
1064
+ attributes: [],
1065
+ dimension: null,
1066
+ },
1067
+ {
1068
+ name: 'discount',
1069
+ type: 'float',
1070
+ display_name: 'Discount',
1071
+ attributes: [],
1072
+ dimension: null,
1073
+ },
1074
+ ],
1075
+ updated_at: '2023-08-21T16:48:52.981201+00:00',
1076
+ materializations: [],
1077
+ parents: [],
1078
+ created_at: '2023-08-21T16:48:52.970554+00:00',
1079
+ tags: [],
1080
+ },
1081
+ {
1082
+ namespace: 'default',
1083
+ node_revision_id: 14,
1084
+ node_id: 14,
1085
+ type: 'dimension',
1086
+ name: 'default.date_dim',
1087
+ display_name: 'Default: Date Dim',
1088
+ version: 'v1.0',
1089
+ status: 'valid',
1090
+ mode: 'published',
1091
+ catalog: {
1092
+ id: 1,
1093
+ uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
1094
+ created_at: '2023-08-21T16:48:51.146121+00:00',
1095
+ updated_at: '2023-08-21T16:48:51.146122+00:00',
1096
+ extra_params: {},
1097
+ name: 'warehouse',
1098
+ },
1099
+ schema_: null,
1100
+ table: null,
1101
+ description: 'Date dimension',
1102
+ query:
1103
+ '\n SELECT\n dateint,\n month,\n year,\n day\n FROM default.date\n ',
1104
+ availability: null,
1105
+ columns: [
1106
+ {
1107
+ name: 'dateint',
1108
+ type: 'timestamp',
1109
+ display_name: 'Dateint',
1110
+ attributes: [
1111
+ {
1112
+ attribute_type: {
1113
+ namespace: 'system',
1114
+ name: 'primary_key',
1115
+ },
1116
+ },
1117
+ ],
1118
+ dimension: null,
1119
+ },
1120
+ {
1121
+ name: 'month',
1122
+ type: 'int',
1123
+ display_name: 'Month',
1124
+ attributes: [],
1125
+ dimension: null,
1126
+ },
1127
+ {
1128
+ name: 'year',
1129
+ type: 'int',
1130
+ display_name: 'Year',
1131
+ attributes: [],
1132
+ dimension: null,
1133
+ },
1134
+ {
1135
+ name: 'day',
1136
+ type: 'int',
1137
+ display_name: 'Day',
1138
+ attributes: [],
1139
+ dimension: null,
1140
+ },
1141
+ ],
1142
+ updated_at: '2023-08-21T16:48:54.726980+00:00',
1143
+ materializations: [],
1144
+ parents: [
1145
+ {
1146
+ name: 'default.date',
1147
+ },
1148
+ ],
1149
+ created_at: '2023-08-21T16:48:54.726871+00:00',
1150
+ tags: [],
1151
+ },
1152
+ {
1153
+ namespace: 'default',
1154
+ node_revision_id: 18,
1155
+ node_id: 18,
1156
+ type: 'dimension',
1157
+ name: 'default.hard_hat',
1158
+ display_name: 'Default: Hard Hat',
1159
+ version: 'v1.0',
1160
+ status: 'valid',
1161
+ mode: 'published',
1162
+ catalog: {
1163
+ id: 1,
1164
+ uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
1165
+ created_at: '2023-08-21T16:48:51.146121+00:00',
1166
+ updated_at: '2023-08-21T16:48:51.146122+00:00',
1167
+ extra_params: {},
1168
+ name: 'warehouse',
1169
+ },
1170
+ schema_: null,
1171
+ table: null,
1172
+ description: 'Hard hat dimension',
1173
+ query:
1174
+ '\n SELECT\n hard_hat_id,\n last_name,\n first_name,\n title,\n birth_date,\n hire_date,\n address,\n city,\n state,\n postal_code,\n country,\n manager,\n contractor_id\n FROM default.hard_hats\n ',
1175
+ availability: null,
1176
+ columns: [
1177
+ {
1178
+ name: 'hard_hat_id',
1179
+ type: 'int',
1180
+ display_name: 'Hard Hat Id',
1181
+ attributes: [
1182
+ {
1183
+ attribute_type: {
1184
+ namespace: 'system',
1185
+ name: 'primary_key',
1186
+ },
1187
+ },
1188
+ ],
1189
+ dimension: null,
1190
+ },
1191
+ {
1192
+ name: 'last_name',
1193
+ type: 'string',
1194
+ display_name: 'Last Name',
1195
+ attributes: [],
1196
+ dimension: null,
1197
+ },
1198
+ {
1199
+ name: 'first_name',
1200
+ type: 'string',
1201
+ display_name: 'First Name',
1202
+ attributes: [],
1203
+ dimension: null,
1204
+ },
1205
+ {
1206
+ name: 'title',
1207
+ type: 'string',
1208
+ display_name: 'Title',
1209
+ attributes: [],
1210
+ dimension: null,
1211
+ },
1212
+ {
1213
+ name: 'birth_date',
1214
+ type: 'date',
1215
+ display_name: 'Birth Date',
1216
+ attributes: [],
1217
+ dimension: {
1218
+ name: 'default.date_dim',
1219
+ },
1220
+ },
1221
+ {
1222
+ name: 'hire_date',
1223
+ type: 'date',
1224
+ attributes: [],
1225
+ dimension: {
1226
+ name: 'default.date_dim',
1227
+ },
1228
+ display_name: 'Hire Date',
1229
+ },
1230
+ {
1231
+ name: 'address',
1232
+ type: 'string',
1233
+ attributes: [],
1234
+ dimension: null,
1235
+ display_name: 'Address',
1236
+ },
1237
+ {
1238
+ name: 'city',
1239
+ type: 'string',
1240
+ attributes: [],
1241
+ dimension: null,
1242
+ display_name: 'City',
1243
+ },
1244
+ {
1245
+ name: 'state',
1246
+ type: 'string',
1247
+ attributes: [],
1248
+ dimension: {
1249
+ name: 'default.us_state',
1250
+ },
1251
+ display_name: 'State',
1252
+ },
1253
+ {
1254
+ name: 'postal_code',
1255
+ type: 'string',
1256
+ attributes: [],
1257
+ dimension: null,
1258
+ display_name: 'Postal Code',
1259
+ },
1260
+ {
1261
+ name: 'country',
1262
+ type: 'string',
1263
+ attributes: [],
1264
+ dimension: null,
1265
+ display_name: 'Country',
1266
+ },
1267
+ {
1268
+ name: 'manager',
1269
+ type: 'int',
1270
+ attributes: [],
1271
+ dimension: null,
1272
+ display_name: 'Manager',
1273
+ },
1274
+ {
1275
+ name: 'contractor_id',
1276
+ type: 'int',
1277
+ attributes: [],
1278
+ dimension: null,
1279
+ display_name: 'Contractor Id',
1280
+ },
1281
+ ],
1282
+ created_at: '2023-08-21T16:48:55.594537+00:00',
1283
+ tags: [],
1284
+ },
1285
+ {
1286
+ namespace: 'default',
1287
+ node_revision_id: 24,
1288
+ node_id: 24,
1289
+ type: 'metric',
1290
+ name: 'default.avg_repair_price',
1291
+ display_name: 'Default: Avg Repair Price',
1292
+ version: 'v1.0',
1293
+ status: 'valid',
1294
+ mode: 'published',
1295
+ catalog: {
1296
+ id: 1,
1297
+ uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
1298
+ created_at: '2023-08-21T16:48:51.146121+00:00',
1299
+ updated_at: '2023-08-21T16:48:51.146122+00:00',
1300
+ extra_params: {},
1301
+ name: 'warehouse',
1302
+ },
1303
+ schema_: null,
1304
+ table: null,
1305
+ description: 'Average repair price',
1306
+ query:
1307
+ 'SELECT avg(price) default_DOT_avg_repair_price \n FROM default.repair_order_details\n\n',
1308
+ availability: null,
1309
+ columns: [
1310
+ {
1311
+ name: 'default_DOT_avg_repair_price',
1312
+ type: 'double',
1313
+ display_name: 'Default DOT avg repair price',
1314
+ attributes: [],
1315
+ dimension: null,
1316
+ },
1317
+ ],
1318
+ updated_at: '2023-08-21T16:48:56.932231+00:00',
1319
+ materializations: [],
1320
+ parents: [
1321
+ {
1322
+ name: 'default.repair_order_details',
1323
+ },
1324
+ ],
1325
+ created_at: '2023-08-21T16:48:56.932162+00:00',
1326
+ tags: [],
1327
+ },
1328
+ ],
1329
+ mockDimensionNode: {
1330
+ namespace: 'default',
1331
+ node_revision_id: 21,
1332
+ node_id: 21,
1333
+ type: 'dimension',
1334
+ name: 'default.dispatcher',
1335
+ display_name: 'Default: Dispatcher',
1336
+ version: 'v1.0',
1337
+ status: 'valid',
1338
+ mode: 'published',
1339
+ catalog: {
1340
+ id: 1,
1341
+ uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
1342
+ created_at: '2023-08-21T16:48:51.146121+00:00',
1343
+ updated_at: '2023-08-21T16:48:51.146122+00:00',
1344
+ extra_params: {},
1345
+ name: 'warehouse',
1346
+ },
1347
+ schema_: null,
1348
+ table: null,
1349
+ description: 'Dispatcher dimension',
1350
+ query:
1351
+ '\n SELECT\n dispatcher_id,\n company_name,\n phone\n FROM default.dispatchers\n ',
1352
+ availability: null,
1353
+ columns: [
1354
+ {
1355
+ name: 'dispatcher_id',
1356
+ type: 'int',
1357
+ display_name: 'Dispatcher Id',
1358
+ attributes: [
1359
+ {
1360
+ attribute_type: {
1361
+ namespace: 'system',
1362
+ name: 'primary_key',
1363
+ },
1364
+ },
1365
+ ],
1366
+ dimension: null,
1367
+ },
1368
+ {
1369
+ name: 'company_name',
1370
+ type: 'string',
1371
+ display_name: 'Company Name',
1372
+ attributes: [],
1373
+ dimension: null,
1374
+ },
1375
+ {
1376
+ name: 'phone',
1377
+ type: 'string',
1378
+ display_name: 'Phone',
1379
+ attributes: [],
1380
+ dimension: null,
1381
+ },
1382
+ ],
1383
+ updated_at: '2023-08-21T16:48:56.399124+00:00',
1384
+ materializations: [],
1385
+ parents: [
1386
+ {
1387
+ name: 'default.dispatchers',
1388
+ },
1389
+ ],
1390
+ created_at: '2023-08-21T16:48:56.399025+00:00',
1391
+ tags: [],
1392
+ },
1393
+ mockLinkedNodes: [
1394
+ {
1395
+ node_revision_id: 2,
1396
+ node_id: 2,
1397
+ type: 'source',
1398
+ name: 'default.repair_order_details',
1399
+ display_name: 'Default: Repair Order Details',
1400
+ },
1401
+ {
1402
+ node_revision_id: 3,
1403
+ node_id: 3,
1404
+ type: 'source',
1405
+ name: 'default.num_repair_orders',
1406
+ display_name: 'Default: Num Repair Orders',
1407
+ },
1408
+ ],
1409
+ tags: [
1410
+ {
1411
+ description: 'Financial-related reports',
1412
+ display_name: 'Financial Reports',
1413
+ tag_metadata: {},
1414
+ name: 'report.financials',
1415
+ tag_type: 'reports',
1416
+ },
1417
+ {
1418
+ description: 'Forecasting reports',
1419
+ display_name: 'Forecasting Reports',
1420
+ tag_metadata: {},
1421
+ name: 'reports.forecasts',
1422
+ tag_type: 'reports',
1423
+ },
1424
+ ],
1425
+ materializationInfo: {
1426
+ job_types: [
1427
+ {
1428
+ name: 'spark_sql',
1429
+ label: 'Spark SQL',
1430
+ description: 'Spark SQL materialization job',
1431
+ allowed_node_types: ['transform', 'dimension', 'cube'],
1432
+ job_class: 'SparkSqlMaterializationJob',
1433
+ },
1434
+ {
1435
+ name: 'druid_measures_cube',
1436
+ label: 'Druid Measures Cube (Pre-Agg Cube)',
1437
+ description:
1438
+ "Used to materialize a cube's measures to Druid for low-latency access to a set of metrics and dimensions. While the logical cube definition is at the level of metrics and dimensions, this materialized Druid cube will contain measures and dimensions, with rollup configured on the measures where appropriate.",
1439
+ allowed_node_types: ['cube'],
1440
+ job_class: 'DruidMeasuresCubeMaterializationJob',
1441
+ },
1442
+ {
1443
+ name: 'druid_metrics_cube',
1444
+ label: 'Druid Metrics Cube (Post-Agg Cube)',
1445
+ description:
1446
+ "Used to materialize a cube of metrics and dimensions to Druid for low-latency access. The materialized cube is at the metric level, meaning that all metrics will be aggregated to the level of the cube's dimensions.",
1447
+ allowed_node_types: ['cube'],
1448
+ job_class: 'DruidMetricsCubeMaterializationJob',
1449
+ },
1450
+ ],
1451
+ strategies: [
1452
+ {
1453
+ name: 'full',
1454
+ label: 'Full',
1455
+ },
1456
+ {
1457
+ name: 'snapshot',
1458
+ label: 'Snapshot',
1459
+ },
1460
+ {
1461
+ name: 'snapshot_partition',
1462
+ label: 'Snapshot Partition',
1463
+ },
1464
+ {
1465
+ name: 'incremental_time',
1466
+ label: 'Incremental Time',
1467
+ },
1468
+ {
1469
+ name: 'view',
1470
+ label: 'View',
1471
+ },
1472
+ ],
1473
+ },
1474
+ };