acryl-datahub-cloud 0.3.12.1rc3__py3-none-any.whl → 0.3.12.3__py3-none-any.whl
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.
Potentially problematic release.
This version of acryl-datahub-cloud might be problematic. Click here for more details.
- acryl_datahub_cloud/_codegen_config.json +1 -1
- acryl_datahub_cloud/sdk/__init__.py +20 -0
- acryl_datahub_cloud/sdk/assertion/assertion_base.py +146 -97
- acryl_datahub_cloud/sdk/assertion/column_metric_assertion.py +191 -0
- acryl_datahub_cloud/sdk/assertion/smart_column_metric_assertion.py +10 -22
- acryl_datahub_cloud/sdk/assertion_input/assertion_input.py +99 -19
- acryl_datahub_cloud/sdk/assertion_input/column_metric_assertion_input.py +965 -0
- acryl_datahub_cloud/sdk/assertion_input/column_metric_constants.py +191 -0
- acryl_datahub_cloud/sdk/assertion_input/freshness_assertion_input.py +60 -11
- acryl_datahub_cloud/sdk/assertion_input/smart_column_metric_assertion_input.py +438 -347
- acryl_datahub_cloud/sdk/assertion_input/sql_assertion_input.py +105 -61
- acryl_datahub_cloud/sdk/assertion_input/volume_assertion_input.py +381 -392
- acryl_datahub_cloud/sdk/assertions_client.py +993 -314
- {acryl_datahub_cloud-0.3.12.1rc3.dist-info → acryl_datahub_cloud-0.3.12.3.dist-info}/METADATA +44 -43
- {acryl_datahub_cloud-0.3.12.1rc3.dist-info → acryl_datahub_cloud-0.3.12.3.dist-info}/RECORD +18 -15
- {acryl_datahub_cloud-0.3.12.1rc3.dist-info → acryl_datahub_cloud-0.3.12.3.dist-info}/WHEEL +0 -0
- {acryl_datahub_cloud-0.3.12.1rc3.dist-info → acryl_datahub_cloud-0.3.12.3.dist-info}/entry_points.txt +0 -0
- {acryl_datahub_cloud-0.3.12.1rc3.dist-info → acryl_datahub_cloud-0.3.12.3.dist-info}/top_level.txt +0 -0
|
@@ -11,7 +11,6 @@ from acryl_datahub_cloud.sdk.assertion_input.assertion_input import (
|
|
|
11
11
|
AssertionIncidentBehaviorInputTypes,
|
|
12
12
|
FieldSpecType,
|
|
13
13
|
_AssertionInput,
|
|
14
|
-
_try_parse_and_validate_schema_classes_enum,
|
|
15
14
|
)
|
|
16
15
|
from acryl_datahub_cloud.sdk.entities.assertion import (
|
|
17
16
|
AssertionInfoInputType,
|
|
@@ -23,62 +22,110 @@ from datahub.metadata.urns import AssertionUrn, CorpUserUrn, DatasetUrn
|
|
|
23
22
|
from datahub.sdk.entity_client import EntityClient
|
|
24
23
|
|
|
25
24
|
|
|
26
|
-
class
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
NOT_EQUAL_TO = models.AssertionStdOperatorClass.NOT_EQUAL_TO
|
|
39
|
-
GREATER_THAN = models.AssertionStdOperatorClass.GREATER_THAN
|
|
40
|
-
LESS_THAN = models.AssertionStdOperatorClass.LESS_THAN
|
|
41
|
-
GREATER_THAN_OR_EQUAL_TO = models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO
|
|
42
|
-
LESS_THAN_OR_EQUAL_TO = models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO
|
|
43
|
-
BETWEEN = models.AssertionStdOperatorClass.BETWEEN
|
|
25
|
+
class SqlAssertionCondition(Enum):
|
|
26
|
+
IS_EQUAL_TO = "IS_EQUAL_TO" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.EQUAL_TO
|
|
27
|
+
IS_NOT_EQUAL_TO = "IS_NOT_EQUAL_TO" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.NOT_EQUAL_TO
|
|
28
|
+
IS_GREATER_THAN = "IS_GREATER_THAN" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.GREATER_THAN
|
|
29
|
+
IS_LESS_THAN = "IS_LESS_THAN" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.LESS_THAN
|
|
30
|
+
IS_WITHIN_A_RANGE = "IS_WITHIN_A_RANGE" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.BETWEEN
|
|
31
|
+
GROWS_AT_MOST_ABSOLUTE = "GROWS_AT_MOST_ABSOLUTE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO + models.AssertionValueChangeTypeClass.ABSOLUTE
|
|
32
|
+
GROWS_AT_MOST_PERCENTAGE = "GROWS_AT_MOST_PERCENTAGE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO + models.AssertionValueChangeTypeClass.PERCENTAGE
|
|
33
|
+
GROWS_AT_LEAST_ABSOLUTE = "GROWS_AT_LEAST_ABSOLUTE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO + models.AssertionValueChangeTypeClass.ABSOLUTE
|
|
34
|
+
GROWS_AT_LEAST_PERCENTAGE = "GROWS_AT_LEAST_PERCENTAGE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO + models.AssertionValueChangeTypeClass.PERCENTAGE
|
|
35
|
+
GROWS_WITHIN_A_RANGE_ABSOLUTE = "GROWS_WITHIN_A_RANGE_ABSOLUTE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.BETWEEN + models.AssertionValueChangeTypeClass.ABSOLUTE
|
|
36
|
+
GROWS_WITHIN_A_RANGE_PERCENTAGE = "GROWS_WITHIN_A_RANGE_PERCENTAGE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.BETWEEN + models.AssertionValueChangeTypeClass.PERCENTAGE
|
|
44
37
|
|
|
45
38
|
|
|
46
39
|
class SqlAssertionCriteria(BaseModel):
|
|
47
|
-
|
|
48
|
-
change_type: Optional[Union[SqlAssertionChangeType, str]]
|
|
49
|
-
operator: Union[SqlAssertionOperator, str]
|
|
40
|
+
condition: Union[SqlAssertionCondition, str]
|
|
50
41
|
# Either a single value or a range must be provided
|
|
51
42
|
parameters: Union[Union[float, int], tuple[Union[float, int], Union[float, int]]]
|
|
52
43
|
|
|
53
44
|
@classmethod
|
|
54
|
-
def
|
|
55
|
-
cls,
|
|
45
|
+
def get_type_from_condition(
|
|
46
|
+
cls, condition: Union[SqlAssertionCondition, str]
|
|
56
47
|
) -> models.SqlAssertionTypeClass:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
48
|
+
condition_enum = (
|
|
49
|
+
condition
|
|
50
|
+
if isinstance(condition, SqlAssertionCondition)
|
|
51
|
+
else SqlAssertionCondition(condition)
|
|
60
52
|
)
|
|
61
53
|
|
|
54
|
+
if condition_enum in [
|
|
55
|
+
SqlAssertionCondition.IS_EQUAL_TO,
|
|
56
|
+
SqlAssertionCondition.IS_NOT_EQUAL_TO,
|
|
57
|
+
SqlAssertionCondition.IS_GREATER_THAN,
|
|
58
|
+
SqlAssertionCondition.IS_LESS_THAN,
|
|
59
|
+
SqlAssertionCondition.IS_WITHIN_A_RANGE,
|
|
60
|
+
]:
|
|
61
|
+
return models.SqlAssertionTypeClass.METRIC # type: ignore[return-value]
|
|
62
|
+
elif condition_enum in [
|
|
63
|
+
SqlAssertionCondition.GROWS_AT_MOST_ABSOLUTE,
|
|
64
|
+
SqlAssertionCondition.GROWS_AT_MOST_PERCENTAGE,
|
|
65
|
+
SqlAssertionCondition.GROWS_AT_LEAST_ABSOLUTE,
|
|
66
|
+
SqlAssertionCondition.GROWS_AT_LEAST_PERCENTAGE,
|
|
67
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_ABSOLUTE,
|
|
68
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_PERCENTAGE,
|
|
69
|
+
]:
|
|
70
|
+
return models.SqlAssertionTypeClass.METRIC_CHANGE # type: ignore[return-value]
|
|
71
|
+
else:
|
|
72
|
+
raise SDKUsageError(f"Unknown condition: {condition_enum}")
|
|
73
|
+
|
|
62
74
|
@classmethod
|
|
63
|
-
def
|
|
64
|
-
cls,
|
|
65
|
-
) ->
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
models.AssertionValueChangeTypeClass,
|
|
75
|
+
def get_operator_from_condition(
|
|
76
|
+
cls, condition: Union[SqlAssertionCondition, str]
|
|
77
|
+
) -> models.AssertionStdOperatorClass:
|
|
78
|
+
condition_enum = (
|
|
79
|
+
condition
|
|
80
|
+
if isinstance(condition, SqlAssertionCondition)
|
|
81
|
+
else SqlAssertionCondition(condition)
|
|
71
82
|
)
|
|
72
83
|
|
|
84
|
+
condition_to_operator = {
|
|
85
|
+
SqlAssertionCondition.IS_EQUAL_TO: models.AssertionStdOperatorClass.EQUAL_TO,
|
|
86
|
+
SqlAssertionCondition.IS_NOT_EQUAL_TO: models.AssertionStdOperatorClass.NOT_EQUAL_TO,
|
|
87
|
+
SqlAssertionCondition.IS_GREATER_THAN: models.AssertionStdOperatorClass.GREATER_THAN,
|
|
88
|
+
SqlAssertionCondition.IS_LESS_THAN: models.AssertionStdOperatorClass.LESS_THAN,
|
|
89
|
+
SqlAssertionCondition.IS_WITHIN_A_RANGE: models.AssertionStdOperatorClass.BETWEEN,
|
|
90
|
+
SqlAssertionCondition.GROWS_AT_MOST_ABSOLUTE: models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO,
|
|
91
|
+
SqlAssertionCondition.GROWS_AT_MOST_PERCENTAGE: models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO,
|
|
92
|
+
SqlAssertionCondition.GROWS_AT_LEAST_ABSOLUTE: models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO,
|
|
93
|
+
SqlAssertionCondition.GROWS_AT_LEAST_PERCENTAGE: models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO,
|
|
94
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_ABSOLUTE: models.AssertionStdOperatorClass.BETWEEN,
|
|
95
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_PERCENTAGE: models.AssertionStdOperatorClass.BETWEEN,
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if condition_enum not in condition_to_operator:
|
|
99
|
+
raise SDKUsageError(f"Unknown condition: {condition_enum}")
|
|
100
|
+
|
|
101
|
+
return condition_to_operator[condition_enum] # type: ignore[return-value]
|
|
102
|
+
|
|
73
103
|
@classmethod
|
|
74
|
-
def
|
|
75
|
-
cls,
|
|
76
|
-
) -> models.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
104
|
+
def get_change_type_from_condition(
|
|
105
|
+
cls, condition: Union[SqlAssertionCondition, str]
|
|
106
|
+
) -> Optional[models.AssertionValueChangeTypeClass]:
|
|
107
|
+
condition_enum = (
|
|
108
|
+
condition
|
|
109
|
+
if isinstance(condition, SqlAssertionCondition)
|
|
110
|
+
else SqlAssertionCondition(condition)
|
|
80
111
|
)
|
|
81
112
|
|
|
113
|
+
if condition_enum in [
|
|
114
|
+
SqlAssertionCondition.GROWS_AT_MOST_ABSOLUTE,
|
|
115
|
+
SqlAssertionCondition.GROWS_AT_LEAST_ABSOLUTE,
|
|
116
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_ABSOLUTE,
|
|
117
|
+
]:
|
|
118
|
+
return models.AssertionValueChangeTypeClass.ABSOLUTE # type: ignore[return-value]
|
|
119
|
+
elif condition_enum in [
|
|
120
|
+
SqlAssertionCondition.GROWS_AT_MOST_PERCENTAGE,
|
|
121
|
+
SqlAssertionCondition.GROWS_AT_LEAST_PERCENTAGE,
|
|
122
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_PERCENTAGE,
|
|
123
|
+
]:
|
|
124
|
+
return models.AssertionValueChangeTypeClass.PERCENTAGE # type: ignore[return-value]
|
|
125
|
+
else:
|
|
126
|
+
# Value-based conditions don't have a change type
|
|
127
|
+
return None
|
|
128
|
+
|
|
82
129
|
@classmethod
|
|
83
130
|
def get_parameters(
|
|
84
131
|
cls,
|
|
@@ -111,36 +158,30 @@ class SqlAssertionCriteria(BaseModel):
|
|
|
111
158
|
|
|
112
159
|
@staticmethod
|
|
113
160
|
def validate(criteria: "SqlAssertionCriteria") -> "SqlAssertionCriteria":
|
|
114
|
-
operator = SqlAssertionCriteria.
|
|
161
|
+
operator = SqlAssertionCriteria.get_operator_from_condition(criteria.condition)
|
|
162
|
+
condition_enum = (
|
|
163
|
+
criteria.condition
|
|
164
|
+
if isinstance(criteria.condition, SqlAssertionCondition)
|
|
165
|
+
else SqlAssertionCondition(criteria.condition)
|
|
166
|
+
)
|
|
167
|
+
|
|
115
168
|
if operator in SINGLE_VALUE_NUMERIC_OPERATORS:
|
|
116
169
|
if not isinstance(criteria.parameters, float) and not isinstance(
|
|
117
170
|
criteria.parameters, int
|
|
118
171
|
):
|
|
119
172
|
raise SDKUsageError(
|
|
120
|
-
f"The parameter value of SqlAssertionCriteria must be a single value numeric for
|
|
173
|
+
f"The parameter value of SqlAssertionCriteria must be a single value numeric for condition {str(condition_enum)}"
|
|
121
174
|
)
|
|
122
175
|
elif operator in RANGE_OPERATORS:
|
|
123
176
|
if not isinstance(criteria.parameters, tuple):
|
|
124
177
|
raise SDKUsageError(
|
|
125
|
-
f"The parameter value of SqlAssertionCriteria must be a tuple range for
|
|
178
|
+
f"The parameter value of SqlAssertionCriteria must be a tuple range for condition {str(condition_enum)}"
|
|
126
179
|
)
|
|
127
180
|
else:
|
|
128
181
|
raise SDKUsageError(
|
|
129
|
-
f"
|
|
182
|
+
f"Condition {str(condition_enum)} is not supported for SqlAssertionCriteria"
|
|
130
183
|
)
|
|
131
184
|
|
|
132
|
-
if (
|
|
133
|
-
criteria.type == SqlAssertionType.METRIC_CHANGE
|
|
134
|
-
and criteria.change_type is None
|
|
135
|
-
):
|
|
136
|
-
raise SDKUsageError("Change type is required for metric change assertions")
|
|
137
|
-
|
|
138
|
-
if (
|
|
139
|
-
criteria.type == SqlAssertionType.METRIC
|
|
140
|
-
and criteria.change_type is not None
|
|
141
|
-
):
|
|
142
|
-
raise SDKUsageError("Change type is not allowed for metric assertions")
|
|
143
|
-
|
|
144
185
|
return criteria
|
|
145
186
|
|
|
146
187
|
|
|
@@ -227,11 +268,15 @@ class _SqlAssertionInput(_AssertionInput):
|
|
|
227
268
|
SqlAssertionCriteria.validate(self.criteria)
|
|
228
269
|
|
|
229
270
|
return models.SqlAssertionInfoClass(
|
|
230
|
-
type=SqlAssertionCriteria.
|
|
271
|
+
type=SqlAssertionCriteria.get_type_from_condition(self.criteria.condition),
|
|
231
272
|
entity=str(self.dataset_urn),
|
|
232
273
|
statement=self.statement,
|
|
233
|
-
changeType=SqlAssertionCriteria.
|
|
234
|
-
|
|
274
|
+
changeType=SqlAssertionCriteria.get_change_type_from_condition(
|
|
275
|
+
self.criteria.condition
|
|
276
|
+
),
|
|
277
|
+
operator=SqlAssertionCriteria.get_operator_from_condition(
|
|
278
|
+
self.criteria.condition
|
|
279
|
+
),
|
|
235
280
|
parameters=SqlAssertionCriteria.get_parameters(self.criteria.parameters),
|
|
236
281
|
)
|
|
237
282
|
|
|
@@ -262,7 +307,6 @@ class _SqlAssertionInput(_AssertionInput):
|
|
|
262
307
|
Returns:
|
|
263
308
|
A CronScheduleClass with appropriate schedule settings.
|
|
264
309
|
"""
|
|
265
|
-
print(f"self.schedule: {self.schedule}")
|
|
266
310
|
if self.schedule is None:
|
|
267
311
|
return DEFAULT_EVERY_SIX_HOURS_SCHEDULE
|
|
268
312
|
|