datajunction-ui 0.0.1-rc.9 → 0.0.2-0.dev1

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