Skip to content

Commit 5db78ca

Browse files
authored
Some additional SL JSONSchema improvements/fixes (#11821)
* Pull in latest jsonschemas, primarily for improved SL definitions * Improve metric definitions in happy path test fixture to be more expansive * Add changie doc * Fix test_list to know about new happy path fixture metrics
1 parent ada9e63 commit 5db78ca

File tree

5 files changed

+183
-54
lines changed

5 files changed

+183
-54
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
kind: Fixes
2+
body: Improve SL JSONSchema definitions
3+
time: 2025-07-14T12:50:00.3541-05:00
4+
custom:
5+
Author: QMalcolm
6+
Issue: N/A

core/dbt/include/jsonschemas/project/0.0.110.json

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,9 +1111,13 @@
11111111
]
11121112
},
11131113
"+severity": {
1114-
"type": [
1115-
"string",
1116-
"null"
1114+
"anyOf": [
1115+
{
1116+
"$ref": "#/definitions/Severity"
1117+
},
1118+
{
1119+
"type": "null"
1120+
}
11171121
]
11181122
},
11191123
"+skip_matched_step": {
@@ -4138,6 +4142,13 @@
41384142
},
41394143
"additionalProperties": false
41404144
},
4145+
"Severity": {
4146+
"type": "string",
4147+
"enum": [
4148+
"Error",
4149+
"Warn"
4150+
]
4151+
},
41414152
"SnapshotMetaColumnNames": {
41424153
"type": "object",
41434154
"properties": {

core/dbt/include/jsonschemas/resources/latest.json

Lines changed: 59 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,7 @@
620620
],
621621
"properties": {
622622
"base_measure": {
623-
"$ref": "#/definitions/MetricInputMeasure"
623+
"$ref": "#/definitions/StringOrMetricInputMeasure"
624624
},
625625
"calculation": {
626626
"$ref": "#/definitions/ConversionCalculationType"
@@ -635,7 +635,7 @@
635635
}
636636
},
637637
"conversion_measure": {
638-
"$ref": "#/definitions/MetricInputMeasure"
638+
"$ref": "#/definitions/StringOrMetricInputMeasure"
639639
},
640640
"entity": {
641641
"type": "string"
@@ -1049,9 +1049,13 @@
10491049
]
10501050
},
10511051
"severity": {
1052-
"type": [
1053-
"string",
1054-
"null"
1052+
"anyOf": [
1053+
{
1054+
"$ref": "#/definitions/Severity"
1055+
},
1056+
{
1057+
"type": "null"
1058+
}
10551059
]
10561060
},
10571061
"skip_matched_step": {
@@ -2213,7 +2217,7 @@
22132217
"filter": {
22142218
"anyOf": [
22152219
{
2216-
"$ref": "#/definitions/WhereFilterIntersection"
2220+
"$ref": "#/definitions/StringOrArrayOfStrings"
22172221
},
22182222
{
22192223
"type": "null"
@@ -2264,7 +2268,7 @@
22642268
"filter": {
22652269
"anyOf": [
22662270
{
2267-
"$ref": "#/definitions/WhereFilterIntersection"
2271+
"$ref": "#/definitions/StringOrArrayOfStrings"
22682272
},
22692273
{
22702274
"type": "null"
@@ -2336,7 +2340,7 @@
23362340
"denominator": {
23372341
"anyOf": [
23382342
{
2339-
"$ref": "#/definitions/StringOrMetricInputMeasure"
2343+
"$ref": "#/definitions/StringOrMetricInput"
23402344
},
23412345
{
23422346
"type": "null"
@@ -2349,13 +2353,6 @@
23492353
"null"
23502354
]
23512355
},
2352-
"input_measures": {
2353-
"default": [],
2354-
"type": "array",
2355-
"items": {
2356-
"$ref": "#/definitions/MetricInputMeasure"
2357-
}
2358-
},
23592356
"measure": {
23602357
"anyOf": [
23612358
{
@@ -2372,13 +2369,13 @@
23722369
"null"
23732370
],
23742371
"items": {
2375-
"$ref": "#/definitions/MetricInput"
2372+
"$ref": "#/definitions/StringOrMetricInput"
23762373
}
23772374
},
23782375
"numerator": {
23792376
"anyOf": [
23802377
{
2381-
"$ref": "#/definitions/MetricInput"
2378+
"$ref": "#/definitions/StringOrMetricInput"
23822379
},
23832380
{
23842381
"type": "null"
@@ -2420,9 +2417,13 @@
24202417
]
24212418
},
24222419
"filter": {
2423-
"type": [
2424-
"string",
2425-
"null"
2420+
"anyOf": [
2421+
{
2422+
"$ref": "#/definitions/StringOrArrayOfStrings"
2423+
},
2424+
{
2425+
"type": "null"
2426+
}
24262427
]
24272428
},
24282429
"label": {
@@ -4423,6 +4424,13 @@
44234424
},
44244425
"additionalProperties": false
44254426
},
4427+
"Severity": {
4428+
"type": "string",
4429+
"enum": [
4430+
"Error",
4431+
"Warn"
4432+
]
4433+
},
44264434
"SnapshotConfig": {
44274435
"type": "object",
44284436
"properties": {
@@ -5628,6 +5636,16 @@
56285636
}
56295637
]
56305638
},
5639+
"StringOrMetricInput": {
5640+
"anyOf": [
5641+
{
5642+
"type": "string"
5643+
},
5644+
{
5645+
"$ref": "#/definitions/MetricInput"
5646+
}
5647+
]
5648+
},
56315649
"StringOrMetricInputMeasure": {
56325650
"anyOf": [
56335651
{
@@ -6240,9 +6258,27 @@
62406258
"UnitTestOverrides": {
62416259
"type": "object",
62426260
"properties": {
6243-
"env_vars": true,
6244-
"macros": true,
6245-
"vars": true
6261+
"env_vars": {
6262+
"type": [
6263+
"object",
6264+
"null"
6265+
],
6266+
"additionalProperties": false
6267+
},
6268+
"macros": {
6269+
"type": [
6270+
"object",
6271+
"null"
6272+
],
6273+
"additionalProperties": false
6274+
},
6275+
"vars": {
6276+
"type": [
6277+
"object",
6278+
"null"
6279+
],
6280+
"additionalProperties": false
6281+
}
62466282
},
62476283
"additionalProperties": false
62486284
},
@@ -6325,33 +6361,6 @@
63256361
"additionalProperties": true
63266362
}
63276363
},
6328-
"WhereFilter": {
6329-
"type": "object",
6330-
"required": [
6331-
"where_sql_template"
6332-
],
6333-
"properties": {
6334-
"where_sql_template": {
6335-
"type": "string"
6336-
}
6337-
},
6338-
"additionalProperties": false
6339-
},
6340-
"WhereFilterIntersection": {
6341-
"type": "object",
6342-
"required": [
6343-
"where_filters"
6344-
],
6345-
"properties": {
6346-
"where_filters": {
6347-
"type": "array",
6348-
"items": {
6349-
"$ref": "#/definitions/WhereFilter"
6350-
}
6351-
}
6352-
},
6353-
"additionalProperties": false
6354-
},
63556364
"_MeasureExpr": {
63566365
"anyOf": [
63576366
{

tests/functional/fixtures/happy_path_project/models/m.yml

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,92 @@ metrics:
55
label: Total Outer
66
type_params:
77
measure: total_outer_count
8+
9+
- name: simple_ratio_metric
10+
description: a simple ratio metric
11+
type: ratio
12+
label: Simple Ratio Metric
13+
type_params:
14+
numerator: total_outer
15+
denominator:
16+
name: total_outer
17+
alias: filtered_total_outer
18+
19+
- name: filtered_ratio_metric
20+
description: a ratio metric
21+
type: ratio
22+
label: Ratio Metric 2
23+
type_params:
24+
numerator:
25+
name: total_outer
26+
filter: 1 = 1
27+
denominator:
28+
name: total_outer
29+
filter:
30+
- 1 = 1
31+
- 2 = 2
32+
alias: filtered_total_outer_again
33+
34+
- name: cumulative_metric
35+
description: a cumulative metric
36+
type: cumulative
37+
label: Cumulative Metric
38+
type_params:
39+
measure:
40+
name: total_outer_count
41+
fill_nulls_with: 0
42+
join_to_timespine: false
43+
filter: 1 = 1
44+
alias: filtered_total_outer_count
45+
cumulative_type_params:
46+
grain_to_date: day
47+
period_agg: first
48+
49+
- name: cumulative_metric_2
50+
description: a cumulative metric
51+
type: cumulative
52+
label: Cumulative Metric 2
53+
type_params:
54+
measure:
55+
name: total_outer_count
56+
fill_nulls_with: 0
57+
join_to_timespine: false
58+
filter: 1 = 1
59+
alias: filtered_total_outer_count_2
60+
cumulative_type_params:
61+
period_agg: first
62+
window: 1 day
63+
64+
- name: conversion_metric
65+
description: a conversion metric
66+
type: conversion
67+
label: Conversion Metric
68+
type_params:
69+
conversion_type_params:
70+
entity: my_entity
71+
calculation: conversion_rate
72+
base_measure: total_outer_count
73+
conversion_measure:
74+
name: total_outer_count
75+
fill_nulls_with: 0
76+
join_to_timespine: false
77+
window: 1 day
78+
constant_properties:
79+
- base_property: my_entity
80+
conversion_property: created_at
81+
82+
- name: derived_metric
83+
description: a derived metric
84+
type: derived
85+
label: Derived Metric
86+
type_params:
87+
expr: srm - cm + filtered_ratio_metric
88+
metrics:
89+
- name: simple_ratio_metric
90+
alias: srm
91+
filter: 1 = 1
92+
offset_window: 1 month
93+
- name: conversion_metric
94+
alias: cm
95+
offset_to_grain: month
96+
- filtered_ratio_metric

tests/functional/list/test_list.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,12 @@ def expect_all_output(self):
10671067
"test.my_second_favorite_test",
10681068
"semantic_model:test.my_sm",
10691069
"metric:test.total_outer",
1070+
"metric:test.conversion_metric",
1071+
"metric:test.cumulative_metric",
1072+
"metric:test.cumulative_metric_2",
1073+
"metric:test.derived_metric",
1074+
"metric:test.filtered_ratio_metric",
1075+
"metric:test.simple_ratio_metric",
10701076
"saved_query:test.my_saved_query",
10711077
"test.expression_is_true_seed_b_2",
10721078
"test.not_null_seed__a_",
@@ -1101,7 +1107,15 @@ def expect_select(self):
11011107
assert set(results) == {"semantic_model:test.my_sm"}
11021108

11031109
results = self.run_dbt_ls(["--resource-type", "metric"])
1104-
assert set(results) == {"metric:test.total_outer"}
1110+
assert set(results) == {
1111+
"metric:test.total_outer",
1112+
"metric:test.simple_ratio_metric",
1113+
"metric:test.filtered_ratio_metric",
1114+
"metric:test.conversion_metric",
1115+
"metric:test.cumulative_metric",
1116+
"metric:test.cumulative_metric_2",
1117+
"metric:test.derived_metric",
1118+
}
11051119

11061120
results = self.run_dbt_ls(["--resource-type", "saved_query"])
11071121
assert set(results) == {"saved_query:test.my_saved_query"}

0 commit comments

Comments
 (0)