datajunction-ui 0.0.1-a1 → 0.0.1-a101

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 (110) hide show
  1. package/Makefile +7 -1
  2. package/package.json +18 -7
  3. package/public/index.html +1 -1
  4. package/src/app/components/AddNodeDropdown.jsx +44 -0
  5. package/src/app/components/ListGroupItem.jsx +2 -1
  6. package/src/app/components/NodeListActions.jsx +69 -0
  7. package/src/app/components/NodeMaterializationDelete.jsx +80 -0
  8. package/src/app/components/QueryInfo.jsx +96 -1
  9. package/src/app/components/Search.jsx +94 -0
  10. package/src/app/components/__tests__/NodeListActions.test.jsx +94 -0
  11. package/src/app/components/__tests__/Search.test.jsx +63 -0
  12. package/src/app/components/__tests__/__snapshots__/ListGroupItem.test.tsx.snap +5 -3
  13. package/src/app/components/djgraph/Collapse.jsx +3 -2
  14. package/src/app/components/djgraph/DJNode.jsx +1 -1
  15. package/src/app/components/djgraph/DJNodeColumns.jsx +5 -1
  16. package/src/app/components/djgraph/LayoutFlow.jsx +5 -3
  17. package/src/app/components/forms/Action.jsx +8 -0
  18. package/src/app/components/forms/NodeNameField.jsx +64 -0
  19. package/src/app/components/search.css +17 -0
  20. package/src/app/icons/AddItemIcon.jsx +16 -0
  21. package/src/app/icons/CommitIcon.jsx +45 -0
  22. package/src/app/icons/DiffIcon.jsx +63 -0
  23. package/src/app/icons/EyeIcon.jsx +20 -0
  24. package/src/app/icons/FilterIcon.jsx +7 -0
  25. package/src/app/icons/JupyterExportIcon.jsx +25 -0
  26. package/src/app/icons/LoadingIcon.jsx +10 -10
  27. package/src/app/icons/PythonIcon.jsx +6 -44
  28. package/src/app/index.tsx +24 -0
  29. package/src/app/pages/AddEditNodePage/AlertMessage.jsx +10 -0
  30. package/src/app/pages/AddEditNodePage/ColumnsSelect.jsx +84 -0
  31. package/src/app/pages/AddEditNodePage/DescriptionField.jsx +17 -0
  32. package/src/app/pages/AddEditNodePage/DisplayNameField.jsx +16 -0
  33. package/src/app/pages/AddEditNodePage/FormikSelect.jsx +5 -0
  34. package/src/app/pages/AddEditNodePage/FullNameField.jsx +3 -2
  35. package/src/app/pages/AddEditNodePage/Loadable.jsx +6 -2
  36. package/src/app/pages/AddEditNodePage/MetricMetadataFields.jsx +75 -0
  37. package/src/app/pages/AddEditNodePage/MetricQueryField.jsx +71 -0
  38. package/src/app/pages/AddEditNodePage/NamespaceField.jsx +40 -0
  39. package/src/app/pages/AddEditNodePage/NodeModeField.jsx +14 -0
  40. package/src/app/pages/AddEditNodePage/NodeQueryField.jsx +8 -3
  41. package/src/app/pages/AddEditNodePage/RequiredDimensionsSelect.jsx +54 -0
  42. package/src/app/pages/AddEditNodePage/TagsField.jsx +47 -0
  43. package/src/app/pages/AddEditNodePage/UpstreamNodeField.jsx +49 -0
  44. package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormFailed.test.jsx +15 -9
  45. package/src/app/pages/AddEditNodePage/__tests__/AddEditNodePageFormSuccess.test.jsx +167 -24
  46. package/src/app/pages/AddEditNodePage/__tests__/index.test.jsx +55 -25
  47. package/src/app/pages/AddEditNodePage/index.jsx +275 -194
  48. package/src/app/pages/CubeBuilderPage/DimensionsSelect.jsx +154 -0
  49. package/src/app/pages/CubeBuilderPage/Loadable.jsx +16 -0
  50. package/src/app/pages/CubeBuilderPage/MetricsSelect.jsx +77 -0
  51. package/src/app/pages/CubeBuilderPage/__tests__/index.test.jsx +405 -0
  52. package/src/app/pages/CubeBuilderPage/index.jsx +267 -0
  53. package/src/app/pages/NamespacePage/AddNamespacePopover.jsx +5 -5
  54. package/src/app/pages/NamespacePage/Explorer.jsx +6 -2
  55. package/src/app/pages/NamespacePage/FieldControl.jsx +21 -0
  56. package/src/app/pages/NamespacePage/NodeTypeSelect.jsx +30 -0
  57. package/src/app/pages/NamespacePage/TagSelect.jsx +44 -0
  58. package/src/app/pages/NamespacePage/UserSelect.jsx +47 -0
  59. package/src/app/pages/NamespacePage/__tests__/index.test.jsx +98 -19
  60. package/src/app/pages/NamespacePage/index.jsx +272 -89
  61. package/src/app/pages/NodePage/AddBackfillPopover.jsx +60 -61
  62. package/src/app/pages/NodePage/AddMaterializationPopover.jsx +104 -51
  63. package/src/app/pages/NodePage/ClientCodePopover.jsx +73 -25
  64. package/src/app/pages/NodePage/DimensionFilter.jsx +86 -0
  65. package/src/app/pages/NodePage/EditColumnDescriptionPopover.jsx +116 -0
  66. package/src/app/pages/NodePage/LinkDimensionPopover.jsx +38 -23
  67. package/src/app/pages/NodePage/MaterializationConfigField.jsx +60 -0
  68. package/src/app/pages/NodePage/NodeColumnTab.jsx +183 -113
  69. package/src/app/pages/NodePage/NodeDependenciesTab.jsx +153 -0
  70. package/src/app/pages/NodePage/NodeGraphTab.jsx +56 -29
  71. package/src/app/pages/NodePage/NodeHistory.jsx +165 -161
  72. package/src/app/pages/NodePage/NodeInfoTab.jsx +148 -14
  73. package/src/app/pages/NodePage/NodeMaterializationTab.jsx +201 -104
  74. package/src/app/pages/NodePage/NodeStatus.jsx +96 -21
  75. package/src/app/pages/NodePage/NodeValidateTab.jsx +367 -0
  76. package/src/app/pages/NodePage/NotebookDownload.jsx +36 -0
  77. package/src/app/pages/NodePage/PartitionColumnPopover.jsx +3 -5
  78. package/src/app/pages/NodePage/PartitionValueForm.jsx +60 -0
  79. package/src/app/pages/NodePage/RevisionDiff.jsx +209 -0
  80. package/src/app/pages/NodePage/WatchNodeButton.jsx +226 -0
  81. package/src/app/pages/NodePage/__tests__/AddBackfillPopover.test.jsx +13 -4
  82. package/src/app/pages/NodePage/__tests__/AddMaterializationPopover.test.jsx +87 -0
  83. package/src/app/pages/NodePage/__tests__/DimensionFilter.test.jsx +74 -0
  84. package/src/app/pages/NodePage/__tests__/EditColumnDescriptionPopover.test.jsx +149 -0
  85. package/src/app/pages/NodePage/__tests__/LinkDimensionPopover.test.jsx +10 -14
  86. package/src/app/pages/NodePage/__tests__/NodeColumnTab.test.jsx +166 -0
  87. package/src/app/pages/NodePage/__tests__/NodeDependenciesTab.test.jsx +151 -0
  88. package/src/app/pages/NodePage/__tests__/NodeGraphTab.test.jsx +6 -2
  89. package/src/app/pages/NodePage/__tests__/NodeLineageTab.test.jsx +3 -2
  90. package/src/app/pages/NodePage/__tests__/NodeMaterializationTab.test.jsx +148 -0
  91. package/src/app/pages/NodePage/__tests__/NodePage.test.jsx +159 -57
  92. package/src/app/pages/NodePage/__tests__/RevisionDiff.test.jsx +164 -0
  93. package/src/app/pages/NodePage/__tests__/__snapshots__/NodePage.test.jsx.snap +2 -386
  94. package/src/app/pages/NodePage/index.jsx +94 -57
  95. package/src/app/pages/Root/__tests__/index.test.jsx +3 -1
  96. package/src/app/pages/Root/index.tsx +62 -12
  97. package/src/app/services/DJService.js +587 -55
  98. package/src/app/services/__tests__/DJService.test.jsx +382 -45
  99. package/src/index.tsx +1 -0
  100. package/src/mocks/mockNodes.jsx +265 -227
  101. package/src/styles/dag.css +4 -2
  102. package/src/styles/index.css +474 -10
  103. package/src/styles/loading.css +1 -1
  104. package/src/styles/node-creation.scss +84 -5
  105. package/src/styles/node-list.css +4 -0
  106. package/src/styles/sorted-table.css +15 -0
  107. package/src/app/components/DeleteNode.jsx +0 -55
  108. package/src/app/components/__tests__/DeleteNode.test.jsx +0 -53
  109. package/src/app/pages/NodePage/NodeSQLTab.jsx +0 -82
  110. package/src/app/pages/NodePage/__tests__/ClientCodePopover.test.jsx +0 -49
@@ -1,4 +1,65 @@
1
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
+ current_version: 'v1.0',
61
+ missing_table: false,
62
+ },
2
63
  mockMetricNode: {
3
64
  namespace: 'default',
4
65
  node_revision_id: 23,
@@ -43,6 +104,8 @@ export const mocks = {
43
104
  ],
44
105
  created_at: '2023-08-21T16:48:56.841631+00:00',
45
106
  tags: [{ name: 'purpose', display_name: 'Purpose' }],
107
+ dimension_links: [],
108
+ incompatible_druid_functions: ['IF'],
46
109
  dimensions: [
47
110
  {
48
111
  value: 'default.date_dim.dateint',
@@ -209,7 +272,88 @@ export const mocks = {
209
272
  label: 'default.us_state.state_region_description (string)',
210
273
  },
211
274
  ],
275
+ metric_metadata: {
276
+ unit: {
277
+ name: 'unitless',
278
+ label: 'Unitless',
279
+ },
280
+ direction: 'neutral',
281
+ max_decimal_exponent: null,
282
+ min_decimal_exponent: null,
283
+ significant_digits: 4,
284
+ },
285
+ upstream_node: 'default.repair_orders',
286
+ expression: 'count(repair_order_id)',
287
+ aggregate_expression: 'count(repair_order_id)',
288
+ required_dimensions: [],
289
+ },
290
+
291
+ mockGetSourceNode: {
292
+ name: 'default.num_repair_orders',
293
+ type: 'SOURCE',
294
+ current: {
295
+ displayName: 'source.prodhive.dse.playback_f',
296
+ description:
297
+ 'This source node was automatically created as a registered table.',
298
+ primaryKey: [],
299
+ parents: [],
300
+ metricMetadata: null,
301
+ requiredDimensions: [],
302
+ mode: 'PUBLISHED',
303
+ },
304
+ tags: [],
305
+ },
306
+
307
+ mockGetMetricNode: {
308
+ name: 'default.num_repair_orders',
309
+ type: 'METRIC',
310
+ current: {
311
+ displayName: 'Default: Num Repair Orders',
312
+ description: 'Number of repair orders',
313
+ primaryKey: ['repair_order_id', 'country'],
314
+ query:
315
+ 'SELECT count(repair_order_id) default_DOT_num_repair_orders FROM default.repair_orders',
316
+ parents: [
317
+ {
318
+ name: 'default.repair_orders',
319
+ },
320
+ ],
321
+ metricMetadata: {
322
+ direction: 'NEUTRAL',
323
+ unit: {
324
+ name: 'UNITLESS',
325
+ },
326
+ expression: 'count(repair_order_id)',
327
+ significantDigits: 5,
328
+ incompatibleDruidFunctions: ['IF'],
329
+ },
330
+ requiredDimensions: [],
331
+ mode: 'PUBLISHED',
332
+ },
333
+ tags: [{ name: 'purpose', displayName: 'Purpose' }],
212
334
  },
335
+
336
+ mockGetTransformNode: {
337
+ name: 'default.repair_order_transform',
338
+ type: 'TRANSFORM',
339
+ current: {
340
+ displayName: 'Default: Repair Order Transform',
341
+ description: 'Repair order dimension',
342
+ primaryKey: [],
343
+ query:
344
+ 'SELECT repair_order_id, municipality_id, hard_hat_id, dispatcher_id FROM default.repair_orders',
345
+ parents: [
346
+ {
347
+ name: 'default.repair_orders',
348
+ },
349
+ ],
350
+ metricMetadata: null,
351
+ requiredDimensions: [],
352
+ mode: 'PUBLISHED',
353
+ },
354
+ tags: [],
355
+ },
356
+
213
357
  attributes: [
214
358
  {
215
359
  uniqueness_scope: [],
@@ -337,17 +481,68 @@ export const mocks = {
337
481
  },
338
482
  created_at: '2023-08-21T16:48:56.950482+00:00',
339
483
  },
484
+ {
485
+ id: 7,
486
+ entity_type: 'backfill',
487
+ entity_name: 'default.avg_repair_price',
488
+ node: 'default.avg_repair_price',
489
+ activity_type: 'create',
490
+ user: null,
491
+ pre: { status: 'valid' },
492
+ post: { status: 'invalid' },
493
+ details: {
494
+ materialization: 'druid_metrics_cube__incremental_time__xyz',
495
+ partition: [
496
+ {
497
+ column_name: 'xyz.abc',
498
+ values: null,
499
+ range: ['20240201', '20240301'],
500
+ },
501
+ ],
502
+ },
503
+ created_at: '2023-08-21T16:48:56.950482+00:00',
504
+ },
505
+ {
506
+ id: 8,
507
+ entity_type: 'node',
508
+ entity_name: 'default.avg_repair_price',
509
+ node: 'default.avg_repair_price',
510
+ activity_type: 'tag',
511
+ user: null,
512
+ pre: {},
513
+ post: {},
514
+ details: {
515
+ tags: ['a', 'b'],
516
+ },
517
+ created_at: '2023-08-21T16:48:56.950482+00:00',
518
+ },
519
+ {
520
+ id: 9,
521
+ entity_type: 'link',
522
+ entity_name: 'default.avg_repair_price',
523
+ node: 'default.avg_repair_price',
524
+ activity_type: 'create',
525
+ user: null,
526
+ pre: {},
527
+ post: {},
528
+ details: {
529
+ dimension: 'abcde',
530
+ },
531
+ created_at: '2023-08-21T16:48:56.950482+00:00',
532
+ },
340
533
  ],
341
534
  nodeMaterializations: [
342
535
  {
343
536
  backfills: [
344
537
  {
345
- spec: {
346
- column_name: 'default_DOT_hard_hat_DOT_hire_date',
347
- values: null,
348
- range: ['20230101', '20230102'],
349
- },
350
- urls: [],
538
+ spec: [
539
+ {
540
+ column_name: 'default_DOT_hard_hat_DOT_hire_date',
541
+ values: null,
542
+ range: ['20230101', '20230102'],
543
+ },
544
+ ],
545
+ urls: ['a', 'b'],
351
546
  },
352
547
  ],
353
548
  name: 'country_birth_date_contractor_id_379232101',
@@ -358,6 +553,7 @@ export const mocks = {
358
553
  "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",
359
554
  upstream_tables: ['default.roads.hard_hats'],
360
555
  },
556
+ strategy: 'incremental_time',
361
557
  schedule: '0 * * * *',
362
558
  job: 'SparkSqlMaterializationJob',
363
559
  output_tables: ['common.a', 'common.b'],
@@ -791,228 +987,21 @@ export const mocks = {
791
987
  },
792
988
  ],
793
989
  mockMetricNodeJson: {
794
- namespace: 'default',
795
- node_revision_id: 24,
796
- node_id: 24,
797
- type: 'metric',
798
- name: 'default.avg_repair_price',
799
- display_name: 'Default: Avg Repair Price',
800
- version: 'v1.0',
801
- status: 'valid',
802
- mode: 'published',
803
- catalog: {
804
- id: 1,
805
- uuid: '0fc18295-e1a2-4c3c-b72a-894725c12488',
806
- created_at: '2023-08-21T16:48:51.146121+00:00',
807
- updated_at: '2023-08-21T16:48:51.146122+00:00',
808
- extra_params: {},
809
- name: 'warehouse',
810
- },
811
- schema_: null,
812
- table: null,
813
- description: 'Average repair price',
814
- query:
815
- 'SELECT avg(price) default_DOT_avg_repair_price \n FROM default.repair_order_details\n\n',
816
- availability: null,
817
- columns: [
818
- {
819
- name: 'default_DOT_avg_repair_price',
820
- type: 'double',
821
- display_name: 'Default DOT avg repair price',
822
- attributes: [],
823
- dimension: null,
824
- },
825
- ],
826
- updated_at: '2023-08-21T16:48:56.932231+00:00',
827
- materializations: [],
828
- parents: [
829
- {
830
- name: 'default.repair_order_details',
831
- },
832
- ],
833
- created_at: '2023-08-21T16:48:56.932162+00:00',
834
- tags: [],
835
- primary_key: [],
836
- createNodeClientCode:
837
- 'dj = DJBuilder(DJ_URL)\n\navg_repair_price = dj.create_metric(\n description="Average repair price",\n display_name="Default: Avg Repair Price",\n name="default.avg_repair_price",\n primary_key=[],\n query="""SELECT avg(price) default_DOT_avg_repair_price \n FROM default.repair_order_details\n\n"""\n)',
838
- dimensions: [
839
- {
840
- name: 'default.date_dim.dateint',
841
- type: 'timestamp',
842
- path: [
843
- 'default.repair_order_details.repair_order_id',
844
- 'default.repair_order.hard_hat_id',
845
- 'default.hard_hat.birth_date',
846
- ],
847
- },
848
- {
849
- name: 'default.date_dim.dateint',
850
- type: 'timestamp',
851
- path: [
852
- 'default.repair_order_details.repair_order_id',
853
- 'default.repair_order.hard_hat_id',
854
- 'default.hard_hat.hire_date',
855
- ],
856
- },
857
- {
858
- name: 'default.date_dim.day',
859
- type: 'int',
860
- path: [
861
- 'default.repair_order_details.repair_order_id',
862
- 'default.repair_order.hard_hat_id',
863
- 'default.hard_hat.birth_date',
864
- ],
865
- },
866
- {
867
- name: 'default.date_dim.day',
868
- type: 'int',
869
- path: [
870
- 'default.repair_order_details.repair_order_id',
871
- 'default.repair_order.hard_hat_id',
872
- 'default.hard_hat.hire_date',
873
- ],
874
- },
875
- {
876
- name: 'default.date_dim.month',
877
- type: 'int',
878
- path: [
879
- 'default.repair_order_details.repair_order_id',
880
- 'default.repair_order.hard_hat_id',
881
- 'default.hard_hat.birth_date',
882
- ],
883
- },
884
- {
885
- name: 'default.date_dim.month',
886
- type: 'int',
887
- path: [
888
- 'default.repair_order_details.repair_order_id',
889
- 'default.repair_order.hard_hat_id',
890
- 'default.hard_hat.hire_date',
891
- ],
892
- },
893
- {
894
- name: 'default.date_dim.year',
895
- type: 'int',
896
- path: [
897
- 'default.repair_order_details.repair_order_id',
898
- 'default.repair_order.hard_hat_id',
899
- 'default.hard_hat.birth_date',
900
- ],
901
- },
902
- {
903
- name: 'default.date_dim.year',
904
- type: 'int',
905
- path: [
906
- 'default.repair_order_details.repair_order_id',
907
- 'default.repair_order.hard_hat_id',
908
- 'default.hard_hat.hire_date',
909
- ],
910
- },
911
- {
912
- name: 'default.hard_hat.address',
913
- type: 'string',
914
- path: [
915
- 'default.repair_order_details.repair_order_id',
916
- 'default.repair_order.hard_hat_id',
917
- ],
918
- },
919
- {
920
- name: 'default.hard_hat.birth_date',
921
- type: 'date',
922
- path: [
923
- 'default.repair_order_details.repair_order_id',
924
- 'default.repair_order.hard_hat_id',
925
- ],
926
- },
927
- {
928
- name: 'default.hard_hat.city',
929
- type: 'string',
930
- path: [
931
- 'default.repair_order_details.repair_order_id',
932
- 'default.repair_order.hard_hat_id',
933
- ],
934
- },
935
- {
936
- name: 'default.hard_hat.contractor_id',
937
- type: 'int',
938
- path: [
939
- 'default.repair_order_details.repair_order_id',
940
- 'default.repair_order.hard_hat_id',
941
- ],
942
- },
943
- {
944
- name: 'default.hard_hat.country',
945
- type: 'string',
946
- path: [
947
- 'default.repair_order_details.repair_order_id',
948
- 'default.repair_order.hard_hat_id',
949
- ],
950
- },
951
- {
952
- name: 'default.hard_hat.first_name',
953
- type: 'string',
954
- path: [
955
- 'default.repair_order_details.repair_order_id',
956
- 'default.repair_order.hard_hat_id',
957
- ],
958
- },
959
- {
960
- name: 'default.hard_hat.hard_hat_id',
961
- type: 'int',
962
- path: [
963
- 'default.repair_order_details.repair_order_id',
964
- 'default.repair_order.hard_hat_id',
965
- ],
966
- },
967
- {
968
- name: 'default.hard_hat.hire_date',
969
- type: 'date',
970
- path: [
971
- 'default.repair_order_details.repair_order_id',
972
- 'default.repair_order.hard_hat_id',
973
- ],
974
- },
975
- {
976
- name: 'default.hard_hat.last_name',
977
- type: 'string',
978
- path: [
979
- 'default.repair_order_details.repair_order_id',
980
- 'default.repair_order.hard_hat_id',
981
- ],
982
- },
983
- {
984
- name: 'default.hard_hat.manager',
985
- type: 'int',
986
- path: [
987
- 'default.repair_order_details.repair_order_id',
988
- 'default.repair_order.hard_hat_id',
989
- ],
990
- },
991
- {
992
- name: 'default.hard_hat.postal_code',
993
- type: 'string',
994
- path: [
995
- 'default.repair_order_details.repair_order_id',
996
- 'default.repair_order.hard_hat_id',
997
- ],
998
- },
999
- {
1000
- name: 'default.hard_hat.state',
1001
- type: 'string',
1002
- path: [
1003
- 'default.repair_order_details.repair_order_id',
1004
- 'default.repair_order.hard_hat_id',
1005
- ],
1006
- },
1007
- {
1008
- name: 'default.hard_hat.title',
1009
- type: 'string',
1010
- path: [
1011
- 'default.repair_order_details.repair_order_id',
1012
- 'default.repair_order.hard_hat_id',
1013
- ],
990
+ name: 'default.num_repair_orders',
991
+ current: {
992
+ parents: [
993
+ {
994
+ name: 'default.repair_orders',
995
+ },
996
+ ],
997
+ metricMetadata: {
998
+ direction: null,
999
+ unit: null,
1000
+ expression: 'count(repair_order_id)',
1001
+ incompatibleDruidFunctions: [],
1014
1002
  },
1015
- ],
1003
+ requiredDimensions: [],
1004
+ },
1016
1005
  },
1017
1006
  mockNodeDAG: [
1018
1007
  {
@@ -1427,4 +1416,53 @@ export const mocks = {
1427
1416
  tag_type: 'reports',
1428
1417
  },
1429
1418
  ],
1419
+ materializationInfo: {
1420
+ job_types: [
1421
+ {
1422
+ name: 'spark_sql',
1423
+ label: 'Spark SQL',
1424
+ description: 'Spark SQL materialization job',
1425
+ allowed_node_types: ['transform', 'dimension', 'cube'],
1426
+ job_class: 'SparkSqlMaterializationJob',
1427
+ },
1428
+ {
1429
+ name: 'druid_measures_cube',
1430
+ label: 'Druid Measures Cube (Pre-Agg Cube)',
1431
+ description:
1432
+ "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.",
1433
+ allowed_node_types: ['cube'],
1434
+ job_class: 'DruidMeasuresCubeMaterializationJob',
1435
+ },
1436
+ {
1437
+ name: 'druid_metrics_cube',
1438
+ label: 'Druid Metrics Cube (Post-Agg Cube)',
1439
+ description:
1440
+ "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.",
1441
+ allowed_node_types: ['cube'],
1442
+ job_class: 'DruidMetricsCubeMaterializationJob',
1443
+ },
1444
+ ],
1445
+ strategies: [
1446
+ {
1447
+ name: 'full',
1448
+ label: 'Full',
1449
+ },
1450
+ {
1451
+ name: 'snapshot',
1452
+ label: 'Snapshot',
1453
+ },
1454
+ {
1455
+ name: 'snapshot_partition',
1456
+ label: 'Snapshot Partition',
1457
+ },
1458
+ {
1459
+ name: 'incremental_time',
1460
+ label: 'Incremental Time',
1461
+ },
1462
+ {
1463
+ name: 'view',
1464
+ label: 'View',
1465
+ },
1466
+ ],
1467
+ },
1430
1468
  };
@@ -208,10 +208,12 @@
208
208
  }
209
209
  .custom-node-port {
210
210
  color: #636776;
211
- font-size: 20px;
211
+ font-size: 23px;
212
212
  text-align: center;
213
213
  }
214
-
214
+ .custom-node-emphasis {
215
+ border: 2px dashed #636776;
216
+ }
215
217
  .white_badge {
216
218
  background-color: #ffffff !important;
217
219
  display: inline-block;