acryl-datahub 1.2.0.7rc1__py3-none-any.whl → 1.2.0.7rc3__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 might be problematic. Click here for more details.
- {acryl_datahub-1.2.0.7rc1.dist-info → acryl_datahub-1.2.0.7rc3.dist-info}/METADATA +2485 -2463
- {acryl_datahub-1.2.0.7rc1.dist-info → acryl_datahub-1.2.0.7rc3.dist-info}/RECORD +26 -27
- datahub/_version.py +1 -1
- datahub/ingestion/source/redshift/config.py +9 -6
- datahub/ingestion/source/redshift/lineage.py +386 -687
- datahub/ingestion/source/redshift/redshift.py +19 -106
- datahub/ingestion/source/snowflake/constants.py +2 -0
- datahub/ingestion/source/snowflake/snowflake_connection.py +15 -4
- datahub/ingestion/source/snowflake/snowflake_schema_gen.py +4 -1
- datahub/ingestion/source/snowflake/snowflake_utils.py +18 -5
- datahub/ingestion/source/snowflake/snowflake_v2.py +2 -0
- datahub/ingestion/source/sql/mssql/job_models.py +3 -1
- datahub/ingestion/source/sql/mssql/source.py +62 -3
- datahub/ingestion/source/unity/config.py +11 -0
- datahub/ingestion/source/unity/proxy.py +77 -0
- datahub/ingestion/source/unity/proxy_types.py +24 -0
- datahub/ingestion/source/unity/report.py +5 -0
- datahub/ingestion/source/unity/source.py +99 -1
- datahub/metadata/_internal_schema_classes.py +5 -5
- datahub/metadata/schema.avsc +66 -60
- datahub/metadata/schemas/LogicalParent.avsc +104 -100
- datahub/metadata/schemas/SchemaFieldKey.avsc +3 -1
- datahub/ingestion/source/redshift/lineage_v2.py +0 -466
- {acryl_datahub-1.2.0.7rc1.dist-info → acryl_datahub-1.2.0.7rc3.dist-info}/WHEEL +0 -0
- {acryl_datahub-1.2.0.7rc1.dist-info → acryl_datahub-1.2.0.7rc3.dist-info}/entry_points.txt +0 -0
- {acryl_datahub-1.2.0.7rc1.dist-info → acryl_datahub-1.2.0.7rc3.dist-info}/licenses/LICENSE +0 -0
- {acryl_datahub-1.2.0.7rc1.dist-info → acryl_datahub-1.2.0.7rc3.dist-info}/top_level.txt +0 -0
|
@@ -12,6 +12,7 @@ from datahub.emitter.mce_builder import (
|
|
|
12
12
|
make_dataset_urn_with_platform_instance,
|
|
13
13
|
make_domain_urn,
|
|
14
14
|
make_group_urn,
|
|
15
|
+
make_ml_model_group_urn,
|
|
15
16
|
make_schema_field_urn,
|
|
16
17
|
make_ts_millis,
|
|
17
18
|
make_user_urn,
|
|
@@ -26,6 +27,7 @@ from datahub.emitter.mcp_builder import (
|
|
|
26
27
|
UnitySchemaKey,
|
|
27
28
|
UnitySchemaKeyWithMetastore,
|
|
28
29
|
add_dataset_to_container,
|
|
30
|
+
add_entity_to_container,
|
|
29
31
|
gen_containers,
|
|
30
32
|
)
|
|
31
33
|
from datahub.emitter.sql_parsing_builder import SqlParsingBuilder
|
|
@@ -87,6 +89,8 @@ from datahub.ingestion.source.unity.proxy_types import (
|
|
|
87
89
|
CustomCatalogType,
|
|
88
90
|
HiveTableType,
|
|
89
91
|
Metastore,
|
|
92
|
+
Model,
|
|
93
|
+
ModelVersion,
|
|
90
94
|
Notebook,
|
|
91
95
|
NotebookId,
|
|
92
96
|
Schema,
|
|
@@ -121,6 +125,7 @@ from datahub.metadata.schema_classes import (
|
|
|
121
125
|
DatasetLineageTypeClass,
|
|
122
126
|
DatasetPropertiesClass,
|
|
123
127
|
DomainsClass,
|
|
128
|
+
MLModelPropertiesClass,
|
|
124
129
|
MySqlDDLClass,
|
|
125
130
|
NullTypeClass,
|
|
126
131
|
OwnerClass,
|
|
@@ -134,7 +139,8 @@ from datahub.metadata.schema_classes import (
|
|
|
134
139
|
UpstreamClass,
|
|
135
140
|
UpstreamLineageClass,
|
|
136
141
|
)
|
|
137
|
-
from datahub.metadata.urns import TagUrn
|
|
142
|
+
from datahub.metadata.urns import MlModelGroupUrn, MlModelUrn, TagUrn
|
|
143
|
+
from datahub.sdk import MLModel, MLModelGroup
|
|
138
144
|
from datahub.sql_parsing.schema_resolver import SchemaResolver
|
|
139
145
|
from datahub.sql_parsing.sqlglot_lineage import (
|
|
140
146
|
SqlParsingResult,
|
|
@@ -182,6 +188,7 @@ class UnityCatalogSource(StatefulIngestionSourceBase, TestableSource):
|
|
|
182
188
|
- metastores
|
|
183
189
|
- schemas
|
|
184
190
|
- tables and column lineage
|
|
191
|
+
- model and model versions
|
|
185
192
|
"""
|
|
186
193
|
|
|
187
194
|
config: UnityCatalogSourceConfig
|
|
@@ -512,6 +519,7 @@ class UnityCatalogSource(StatefulIngestionSourceBase, TestableSource):
|
|
|
512
519
|
yield from self.gen_schema_containers(schema)
|
|
513
520
|
try:
|
|
514
521
|
yield from self.process_tables(schema)
|
|
522
|
+
yield from self.process_ml_models(schema)
|
|
515
523
|
except Exception as e:
|
|
516
524
|
logger.exception(f"Error parsing schema {schema}")
|
|
517
525
|
self.report.report_warning(
|
|
@@ -665,6 +673,69 @@ class UnityCatalogSource(StatefulIngestionSourceBase, TestableSource):
|
|
|
665
673
|
)
|
|
666
674
|
]
|
|
667
675
|
|
|
676
|
+
def process_ml_models(self, schema: Schema) -> Iterable[MetadataWorkUnit]:
|
|
677
|
+
for ml_model in self.unity_catalog_api_proxy.ml_models(
|
|
678
|
+
schema=schema, max_results=self.config.ml_model_max_results
|
|
679
|
+
):
|
|
680
|
+
yield from self.process_ml_model(ml_model, schema)
|
|
681
|
+
ml_model_urn = self.gen_ml_model_urn(ml_model.id)
|
|
682
|
+
for ml_model_version in self.unity_catalog_api_proxy.ml_model_versions(
|
|
683
|
+
ml_model, include_aliases=self.config.include_ml_model_aliases
|
|
684
|
+
):
|
|
685
|
+
yield from self.process_ml_model_version(
|
|
686
|
+
ml_model_urn, ml_model_version, schema
|
|
687
|
+
)
|
|
688
|
+
|
|
689
|
+
def process_ml_model(
|
|
690
|
+
self, ml_model: Model, schema: Schema
|
|
691
|
+
) -> Iterable[MetadataWorkUnit]:
|
|
692
|
+
ml_model_group = MLModelGroup(
|
|
693
|
+
id=ml_model.id,
|
|
694
|
+
name=ml_model.name,
|
|
695
|
+
platform=self.platform,
|
|
696
|
+
platform_instance=schema.name,
|
|
697
|
+
env=self.config.env,
|
|
698
|
+
description=ml_model.description,
|
|
699
|
+
created=ml_model.created_at,
|
|
700
|
+
last_modified=ml_model.updated_at,
|
|
701
|
+
)
|
|
702
|
+
yield from ml_model_group.as_workunits()
|
|
703
|
+
yield from self.add_model_to_schema_container(str(ml_model_group.urn), schema)
|
|
704
|
+
self.report.ml_models.processed(ml_model.id)
|
|
705
|
+
|
|
706
|
+
def process_ml_model_version(
|
|
707
|
+
self, ml_model_urn: str, ml_model_version: ModelVersion, schema: Schema
|
|
708
|
+
) -> Iterable[MetadataWorkUnit]:
|
|
709
|
+
extra_aspects = []
|
|
710
|
+
if ml_model_version.created_at is not None:
|
|
711
|
+
created_time = int(ml_model_version.created_at.timestamp() * 1000)
|
|
712
|
+
created_actor = (
|
|
713
|
+
f"urn:li:platformResource:{ml_model_version.created_by}"
|
|
714
|
+
if ml_model_version.created_by
|
|
715
|
+
else None
|
|
716
|
+
)
|
|
717
|
+
extra_aspects.append(
|
|
718
|
+
MLModelPropertiesClass(
|
|
719
|
+
created=TimeStampClass(time=created_time, actor=created_actor),
|
|
720
|
+
)
|
|
721
|
+
)
|
|
722
|
+
|
|
723
|
+
ml_model = MLModel(
|
|
724
|
+
id=ml_model_version.id,
|
|
725
|
+
name=ml_model_version.name,
|
|
726
|
+
version=str(ml_model_version.version),
|
|
727
|
+
aliases=ml_model_version.aliases,
|
|
728
|
+
description=ml_model_version.description,
|
|
729
|
+
model_group=ml_model_urn,
|
|
730
|
+
platform=self.platform,
|
|
731
|
+
last_modified=ml_model_version.updated_at,
|
|
732
|
+
extra_aspects=extra_aspects,
|
|
733
|
+
)
|
|
734
|
+
|
|
735
|
+
yield from ml_model.as_workunits()
|
|
736
|
+
yield from self.add_model_version_to_schema_container(str(ml_model.urn), schema)
|
|
737
|
+
self.report.ml_model_versions.processed(ml_model_version.id)
|
|
738
|
+
|
|
668
739
|
def ingest_lineage(self, table: Table) -> Optional[UpstreamLineageClass]:
|
|
669
740
|
# Calculate datetime filters for lineage
|
|
670
741
|
lineage_start_time = None
|
|
@@ -802,6 +873,13 @@ class UnityCatalogSource(StatefulIngestionSourceBase, TestableSource):
|
|
|
802
873
|
env=self.config.env,
|
|
803
874
|
)
|
|
804
875
|
|
|
876
|
+
def gen_ml_model_urn(self, name: str) -> str:
|
|
877
|
+
return make_ml_model_group_urn(
|
|
878
|
+
platform=self.platform,
|
|
879
|
+
group_name=name,
|
|
880
|
+
env=self.config.env,
|
|
881
|
+
)
|
|
882
|
+
|
|
805
883
|
def gen_notebook_urn(self, notebook: Union[Notebook, NotebookId]) -> str:
|
|
806
884
|
notebook_id = notebook.id if isinstance(notebook, Notebook) else notebook
|
|
807
885
|
return NotebookKey(
|
|
@@ -973,6 +1051,26 @@ class UnityCatalogSource(StatefulIngestionSourceBase, TestableSource):
|
|
|
973
1051
|
dataset_urn=dataset_urn,
|
|
974
1052
|
)
|
|
975
1053
|
|
|
1054
|
+
def add_model_to_schema_container(
|
|
1055
|
+
self, model_urn: str, schema: Schema
|
|
1056
|
+
) -> Iterable[MetadataWorkUnit]:
|
|
1057
|
+
schema_container_key = self.gen_schema_key(schema)
|
|
1058
|
+
yield from add_entity_to_container(
|
|
1059
|
+
container_key=schema_container_key,
|
|
1060
|
+
entity_type=MlModelGroupUrn.ENTITY_TYPE,
|
|
1061
|
+
entity_urn=model_urn,
|
|
1062
|
+
)
|
|
1063
|
+
|
|
1064
|
+
def add_model_version_to_schema_container(
|
|
1065
|
+
self, model_version_urn: str, schema: Schema
|
|
1066
|
+
) -> Iterable[MetadataWorkUnit]:
|
|
1067
|
+
schema_container_key = self.gen_schema_key(schema)
|
|
1068
|
+
yield from add_entity_to_container(
|
|
1069
|
+
container_key=schema_container_key,
|
|
1070
|
+
entity_type=MlModelUrn.ENTITY_TYPE,
|
|
1071
|
+
entity_urn=model_version_urn,
|
|
1072
|
+
)
|
|
1073
|
+
|
|
976
1074
|
def _get_catalog_tags(
|
|
977
1075
|
self, catalog: str, schema: str, table: str
|
|
978
1076
|
) -> List[UnityCatalogTag]:
|
|
@@ -15283,23 +15283,23 @@ class LogicalParentClass(_Aspect):
|
|
|
15283
15283
|
RECORD_SCHEMA = get_schema_type("com.linkedin.pegasus2avro.logical.LogicalParent")
|
|
15284
15284
|
|
|
15285
15285
|
def __init__(self,
|
|
15286
|
-
parent: "EdgeClass",
|
|
15286
|
+
parent: Union[None, "EdgeClass"]=None,
|
|
15287
15287
|
):
|
|
15288
15288
|
super().__init__()
|
|
15289
15289
|
|
|
15290
15290
|
self.parent = parent
|
|
15291
15291
|
|
|
15292
15292
|
def _restore_defaults(self) -> None:
|
|
15293
|
-
self.parent =
|
|
15293
|
+
self.parent = self.RECORD_SCHEMA.fields_dict["parent"].default
|
|
15294
15294
|
|
|
15295
15295
|
|
|
15296
15296
|
@property
|
|
15297
|
-
def parent(self) -> "EdgeClass":
|
|
15297
|
+
def parent(self) -> Union[None, "EdgeClass"]:
|
|
15298
15298
|
# No docs available.
|
|
15299
15299
|
return self._inner_dict.get('parent') # type: ignore
|
|
15300
15300
|
|
|
15301
15301
|
@parent.setter
|
|
15302
|
-
def parent(self, value: "EdgeClass") -> None:
|
|
15302
|
+
def parent(self, value: Union[None, "EdgeClass"]) -> None:
|
|
15303
15303
|
self._inner_dict['parent'] = value
|
|
15304
15304
|
|
|
15305
15305
|
|
|
@@ -17004,7 +17004,7 @@ class SchemaFieldKeyClass(_Aspect):
|
|
|
17004
17004
|
|
|
17005
17005
|
|
|
17006
17006
|
ASPECT_NAME = 'schemaFieldKey'
|
|
17007
|
-
ASPECT_INFO = {'keyForEntity': 'schemaField', 'entityCategory': 'core', 'entityAspects': ['schemafieldInfo', 'structuredProperties', 'forms', 'businessAttributes', 'status', 'schemaFieldAliases', 'documentation', 'testResults', 'deprecation', 'subTypes', 'logicalParent']}
|
|
17007
|
+
ASPECT_INFO = {'keyForEntity': 'schemaField', 'entityCategory': 'core', 'entityAspects': ['schemafieldInfo', 'structuredProperties', 'forms', 'businessAttributes', 'status', 'schemaFieldAliases', 'documentation', 'testResults', 'deprecation', 'subTypes', 'logicalParent', 'globalTags', 'glossaryTerms']}
|
|
17008
17008
|
RECORD_SCHEMA = get_schema_type("com.linkedin.pegasus2avro.metadata.key.SchemaFieldKey")
|
|
17009
17009
|
|
|
17010
17010
|
def __init__(self,
|
datahub/metadata/schema.avsc
CHANGED
|
@@ -4410,7 +4410,9 @@
|
|
|
4410
4410
|
"testResults",
|
|
4411
4411
|
"deprecation",
|
|
4412
4412
|
"subTypes",
|
|
4413
|
-
"logicalParent"
|
|
4413
|
+
"logicalParent",
|
|
4414
|
+
"globalTags",
|
|
4415
|
+
"glossaryTerms"
|
|
4414
4416
|
]
|
|
4415
4417
|
},
|
|
4416
4418
|
"name": "SchemaFieldKey",
|
|
@@ -10423,67 +10425,71 @@
|
|
|
10423
10425
|
"queryByDefault": false
|
|
10424
10426
|
}
|
|
10425
10427
|
},
|
|
10426
|
-
"type":
|
|
10427
|
-
"
|
|
10428
|
-
|
|
10429
|
-
|
|
10430
|
-
|
|
10431
|
-
|
|
10432
|
-
|
|
10433
|
-
|
|
10428
|
+
"type": [
|
|
10429
|
+
"null",
|
|
10430
|
+
{
|
|
10431
|
+
"type": "record",
|
|
10432
|
+
"name": "Edge",
|
|
10433
|
+
"namespace": "com.linkedin.pegasus2avro.common",
|
|
10434
|
+
"fields": [
|
|
10435
|
+
{
|
|
10436
|
+
"java": {
|
|
10437
|
+
"class": "com.linkedin.pegasus2avro.common.urn.Urn"
|
|
10438
|
+
},
|
|
10439
|
+
"Urn": "Urn",
|
|
10440
|
+
"type": [
|
|
10441
|
+
"null",
|
|
10442
|
+
"string"
|
|
10443
|
+
],
|
|
10444
|
+
"name": "sourceUrn",
|
|
10445
|
+
"default": null,
|
|
10446
|
+
"doc": "Urn of the source of this relationship edge.\nIf not specified, assumed to be the entity that this aspect belongs to."
|
|
10434
10447
|
},
|
|
10435
|
-
|
|
10436
|
-
|
|
10437
|
-
|
|
10438
|
-
|
|
10439
|
-
|
|
10440
|
-
|
|
10441
|
-
|
|
10442
|
-
|
|
10443
|
-
},
|
|
10444
|
-
{
|
|
10445
|
-
"java": {
|
|
10446
|
-
"class": "com.linkedin.pegasus2avro.common.urn.Urn"
|
|
10448
|
+
{
|
|
10449
|
+
"java": {
|
|
10450
|
+
"class": "com.linkedin.pegasus2avro.common.urn.Urn"
|
|
10451
|
+
},
|
|
10452
|
+
"Urn": "Urn",
|
|
10453
|
+
"type": "string",
|
|
10454
|
+
"name": "destinationUrn",
|
|
10455
|
+
"doc": "Urn of the destination of this relationship edge."
|
|
10447
10456
|
},
|
|
10448
|
-
|
|
10449
|
-
|
|
10450
|
-
|
|
10451
|
-
|
|
10452
|
-
|
|
10453
|
-
|
|
10454
|
-
|
|
10455
|
-
"
|
|
10456
|
-
|
|
10457
|
-
|
|
10458
|
-
|
|
10459
|
-
|
|
10460
|
-
|
|
10461
|
-
|
|
10462
|
-
|
|
10463
|
-
|
|
10464
|
-
"
|
|
10465
|
-
|
|
10466
|
-
|
|
10467
|
-
|
|
10468
|
-
|
|
10469
|
-
|
|
10470
|
-
|
|
10471
|
-
|
|
10472
|
-
|
|
10473
|
-
|
|
10474
|
-
|
|
10475
|
-
|
|
10476
|
-
|
|
10477
|
-
|
|
10478
|
-
|
|
10479
|
-
|
|
10480
|
-
|
|
10481
|
-
|
|
10482
|
-
|
|
10483
|
-
|
|
10484
|
-
"doc": "A common structure to represent all edges to entities when used inside aspects as collections\nThis ensures that all edges have common structure around audit-stamps and will support PATCH, time-travel automatically."
|
|
10485
|
-
},
|
|
10486
|
-
"name": "parent"
|
|
10457
|
+
{
|
|
10458
|
+
"type": [
|
|
10459
|
+
"null",
|
|
10460
|
+
"com.linkedin.pegasus2avro.common.AuditStamp"
|
|
10461
|
+
],
|
|
10462
|
+
"name": "created",
|
|
10463
|
+
"default": null,
|
|
10464
|
+
"doc": "Audit stamp containing who created this relationship edge and when"
|
|
10465
|
+
},
|
|
10466
|
+
{
|
|
10467
|
+
"type": [
|
|
10468
|
+
"null",
|
|
10469
|
+
"com.linkedin.pegasus2avro.common.AuditStamp"
|
|
10470
|
+
],
|
|
10471
|
+
"name": "lastModified",
|
|
10472
|
+
"default": null,
|
|
10473
|
+
"doc": "Audit stamp containing who last modified this relationship edge and when"
|
|
10474
|
+
},
|
|
10475
|
+
{
|
|
10476
|
+
"type": [
|
|
10477
|
+
"null",
|
|
10478
|
+
{
|
|
10479
|
+
"type": "map",
|
|
10480
|
+
"values": "string"
|
|
10481
|
+
}
|
|
10482
|
+
],
|
|
10483
|
+
"name": "properties",
|
|
10484
|
+
"default": null,
|
|
10485
|
+
"doc": "A generic properties bag that allows us to store specific information on this graph edge."
|
|
10486
|
+
}
|
|
10487
|
+
],
|
|
10488
|
+
"doc": "A common structure to represent all edges to entities when used inside aspects as collections\nThis ensures that all edges have common structure around audit-stamps and will support PATCH, time-travel automatically."
|
|
10489
|
+
}
|
|
10490
|
+
],
|
|
10491
|
+
"name": "parent",
|
|
10492
|
+
"default": null
|
|
10487
10493
|
}
|
|
10488
10494
|
]
|
|
10489
10495
|
},
|
|
@@ -31,110 +31,114 @@
|
|
|
31
31
|
"queryByDefault": false
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
|
-
"type":
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
34
|
+
"type": [
|
|
35
|
+
"null",
|
|
36
|
+
{
|
|
37
|
+
"type": "record",
|
|
38
|
+
"name": "Edge",
|
|
39
|
+
"namespace": "com.linkedin.pegasus2avro.common",
|
|
40
|
+
"fields": [
|
|
41
|
+
{
|
|
42
|
+
"java": {
|
|
43
|
+
"class": "com.linkedin.pegasus2avro.common.urn.Urn"
|
|
44
|
+
},
|
|
45
|
+
"type": [
|
|
46
|
+
"null",
|
|
47
|
+
"string"
|
|
48
|
+
],
|
|
49
|
+
"name": "sourceUrn",
|
|
50
|
+
"default": null,
|
|
51
|
+
"doc": "Urn of the source of this relationship edge.\nIf not specified, assumed to be the entity that this aspect belongs to.",
|
|
52
|
+
"Urn": "Urn"
|
|
42
53
|
},
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"java": {
|
|
54
|
-
"class": "com.linkedin.pegasus2avro.common.urn.Urn"
|
|
54
|
+
{
|
|
55
|
+
"java": {
|
|
56
|
+
"class": "com.linkedin.pegasus2avro.common.urn.Urn"
|
|
57
|
+
},
|
|
58
|
+
"type": "string",
|
|
59
|
+
"name": "destinationUrn",
|
|
60
|
+
"doc": "Urn of the destination of this relationship edge.",
|
|
61
|
+
"Urn": "Urn"
|
|
55
62
|
},
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"fields": [
|
|
69
|
-
{
|
|
70
|
-
"type": "long",
|
|
71
|
-
"name": "time",
|
|
72
|
-
"doc": "When did the resource/association/sub-resource move into the specific lifecycle stage represented by this AuditEvent."
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"java": {
|
|
76
|
-
"class": "com.linkedin.pegasus2avro.common.urn.Urn"
|
|
63
|
+
{
|
|
64
|
+
"type": [
|
|
65
|
+
"null",
|
|
66
|
+
{
|
|
67
|
+
"type": "record",
|
|
68
|
+
"name": "AuditStamp",
|
|
69
|
+
"namespace": "com.linkedin.pegasus2avro.common",
|
|
70
|
+
"fields": [
|
|
71
|
+
{
|
|
72
|
+
"type": "long",
|
|
73
|
+
"name": "time",
|
|
74
|
+
"doc": "When did the resource/association/sub-resource move into the specific lifecycle stage represented by this AuditEvent."
|
|
77
75
|
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"
|
|
76
|
+
{
|
|
77
|
+
"java": {
|
|
78
|
+
"class": "com.linkedin.pegasus2avro.common.urn.Urn"
|
|
79
|
+
},
|
|
80
|
+
"type": "string",
|
|
81
|
+
"name": "actor",
|
|
82
|
+
"doc": "The entity (e.g. a member URN) which will be credited for moving the resource/association/sub-resource into the specific lifecycle stage. It is also the one used to authorize the change.",
|
|
83
|
+
"Urn": "Urn"
|
|
86
84
|
},
|
|
87
|
-
|
|
88
|
-
"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
"
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
"
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
"
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
85
|
+
{
|
|
86
|
+
"java": {
|
|
87
|
+
"class": "com.linkedin.pegasus2avro.common.urn.Urn"
|
|
88
|
+
},
|
|
89
|
+
"type": [
|
|
90
|
+
"null",
|
|
91
|
+
"string"
|
|
92
|
+
],
|
|
93
|
+
"name": "impersonator",
|
|
94
|
+
"default": null,
|
|
95
|
+
"doc": "The entity (e.g. a service URN) which performs the change on behalf of the Actor and must be authorized to act as the Actor.",
|
|
96
|
+
"Urn": "Urn"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"type": [
|
|
100
|
+
"null",
|
|
101
|
+
"string"
|
|
102
|
+
],
|
|
103
|
+
"name": "message",
|
|
104
|
+
"default": null,
|
|
105
|
+
"doc": "Additional context around how DataHub was informed of the particular change. For example: was the change created by an automated process, or manually."
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"doc": "Data captured on a resource/association/sub-resource level giving insight into when that resource/association/sub-resource moved into a particular lifecycle stage, and who acted to move it into that specific lifecycle stage."
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"name": "created",
|
|
112
|
+
"default": null,
|
|
113
|
+
"doc": "Audit stamp containing who created this relationship edge and when"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"type": [
|
|
117
|
+
"null",
|
|
118
|
+
"com.linkedin.pegasus2avro.common.AuditStamp"
|
|
119
|
+
],
|
|
120
|
+
"name": "lastModified",
|
|
121
|
+
"default": null,
|
|
122
|
+
"doc": "Audit stamp containing who last modified this relationship edge and when"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"type": [
|
|
126
|
+
"null",
|
|
127
|
+
{
|
|
128
|
+
"type": "map",
|
|
129
|
+
"values": "string"
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
"name": "properties",
|
|
133
|
+
"default": null,
|
|
134
|
+
"doc": "A generic properties bag that allows us to store specific information on this graph edge."
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
"doc": "A common structure to represent all edges to entities when used inside aspects as collections\nThis ensures that all edges have common structure around audit-stamps and will support PATCH, time-travel automatically."
|
|
138
|
+
}
|
|
139
|
+
],
|
|
140
|
+
"name": "parent",
|
|
141
|
+
"default": null
|
|
138
142
|
}
|
|
139
143
|
]
|
|
140
144
|
}
|