CorpGroup
CorpGroup represents an identity of a group of users in the enterprise.
Aspects
corpGroupKey
Key for a CorpGroup
Schema
{
"type": "record",
"Aspect": {
"name": "corpGroupKey"
},
"name": "CorpGroupKey",
"namespace": "com.linkedin.metadata.key",
"fields": [
{
"Searchable": {
"boostScore": 10.0,
"enableAutocomplete": true,
"fieldType": "WORD_GRAM",
"queryByDefault": true
},
"type": "string",
"name": "name",
"doc": "The URL-encoded name of the AD/LDAP group. Serves as a globally unique identifier within DataHub."
}
],
"doc": "Key for a CorpGroup"
}
corpGroupInfo
Information about a Corp Group ingested from a third party source
Schema
{
"type": "record",
"Aspect": {
"EntityUrns": [
"com.linkedin.common.CorpGroupUrn"
],
"name": "corpGroupInfo"
},
"name": "CorpGroupInfo",
"namespace": "com.linkedin.identity",
"fields": [
{
"Searchable": {
"boostScore": 10.0,
"enableAutocomplete": true,
"fieldNameAliases": [
"_entityName"
],
"fieldType": "TEXT_PARTIAL",
"queryByDefault": true
},
"type": [
"null",
"string"
],
"name": "displayName",
"default": null,
"doc": "The name of the group."
},
{
"type": [
"null",
"string"
],
"name": "email",
"default": null,
"doc": "email of this group"
},
{
"Relationship": {
"/*": {
"entityTypes": [
"corpuser"
],
"name": "OwnedBy"
}
},
"deprecated": true,
"type": {
"type": "array",
"items": "string"
},
"name": "admins",
"doc": "owners of this group\nDeprecated! Replaced by Ownership aspect."
},
{
"Relationship": {
"/*": {
"entityTypes": [
"corpuser"
],
"name": "IsPartOf"
}
},
"deprecated": true,
"type": {
"type": "array",
"items": "string"
},
"name": "members",
"doc": "List of ldap urn in this group.\nDeprecated! Replaced by GroupMembership aspect."
},
{
"Relationship": {
"/*": {
"entityTypes": [
"corpGroup"
],
"name": "IsPartOf"
}
},
"deprecated": true,
"type": {
"type": "array",
"items": "string"
},
"name": "groups",
"doc": "List of groups in this group.\nDeprecated! This field is unused."
},
{
"Searchable": {
"fieldType": "TEXT_PARTIAL"
},
"type": [
"null",
"string"
],
"name": "description",
"default": null,
"doc": "A description of the group."
},
{
"type": [
"null",
"string"
],
"name": "slack",
"default": null,
"doc": "Slack channel for the group"
},
{
"Searchable": {
"/time": {
"fieldName": "createdTime",
"fieldType": "DATETIME"
}
},
"type": [
"null",
{
"type": "record",
"name": "AuditStamp",
"namespace": "com.linkedin.common",
"fields": [
{
"type": "long",
"name": "time",
"doc": "When did the resource/association/sub-resource move into the specific lifecycle stage represented by this AuditEvent."
},
{
"java": {
"class": "com.linkedin.common.urn.Urn"
},
"type": "string",
"name": "actor",
"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."
},
{
"java": {
"class": "com.linkedin.common.urn.Urn"
},
"type": [
"null",
"string"
],
"name": "impersonator",
"default": null,
"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."
},
{
"type": [
"null",
"string"
],
"name": "message",
"default": null,
"doc": "Additional context around how DataHub was informed of the particular change. For example: was the change created by an automated process, or manually."
}
],
"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."
}
],
"name": "created",
"default": null,
"doc": "Created Audit stamp"
}
],
"doc": "Information about a Corp Group ingested from a third party source"
}
globalTags
Tag aspect used for applying tags to an entity
Schema
{
"type": "record",
"Aspect": {
"name": "globalTags"
},
"name": "GlobalTags",
"namespace": "com.linkedin.common",
"fields": [
{
"Relationship": {
"/*/tag": {
"entityTypes": [
"tag"
],
"name": "TaggedWith"
}
},
"Searchable": {
"/*/tag": {
"addToFilters": true,
"boostScore": 0.5,
"fieldName": "tags",
"fieldType": "URN",
"filterNameOverride": "Tag",
"hasValuesFieldName": "hasTags",
"queryByDefault": true
}
},
"type": {
"type": "array",
"items": {
"type": "record",
"name": "TagAssociation",
"namespace": "com.linkedin.common",
"fields": [
{
"java": {
"class": "com.linkedin.common.urn.TagUrn"
},
"type": "string",
"name": "tag",
"doc": "Urn of the applied tag"
},
{
"type": [
"null",
"string"
],
"name": "context",
"default": null,
"doc": "Additional context about the association"
}
],
"doc": "Properties of an applied tag. For now, just an Urn. In the future we can extend this with other properties, e.g.\npropagation parameters."
}
},
"name": "tags",
"doc": "Tags associated with a given entity"
}
],
"doc": "Tag aspect used for applying tags to an entity"
}
status
The lifecycle status metadata of an entity, e.g. dataset, metric, feature, etc. This aspect is used to represent soft deletes conventionally.
Schema
{
"type": "record",
"Aspect": {
"name": "status"
},
"name": "Status",
"namespace": "com.linkedin.common",
"fields": [
{
"Searchable": {
"fieldType": "BOOLEAN"
},
"type": "boolean",
"name": "removed",
"default": false,
"doc": "Whether the entity has been removed (soft-deleted)."
}
],
"doc": "The lifecycle status metadata of an entity, e.g. dataset, metric, feature, etc.\nThis aspect is used to represent soft deletes conventionally."
}
corpGroupEditableInfo
Group information that can be edited from UI
Schema
{
"type": "record",
"Aspect": {
"name": "corpGroupEditableInfo"
},
"name": "CorpGroupEditableInfo",
"namespace": "com.linkedin.identity",
"fields": [
{
"Searchable": {
"fieldName": "editedDescription",
"fieldType": "TEXT"
},
"type": [
"null",
"string"
],
"name": "description",
"default": null,
"doc": "A description of the group"
},
{
"java": {
"class": "com.linkedin.common.url.Url",
"coercerClass": "com.linkedin.common.url.UrlCoercer"
},
"type": "string",
"name": "pictureLink",
"default": "https://raw.githubusercontent.com/datahub-project/datahub/master/datahub-web-react/src/images/default_avatar.png",
"doc": "A URL which points to a picture which user wants to set as the photo for the group"
},
{
"type": [
"null",
"string"
],
"name": "slack",
"default": null,
"doc": "Slack channel for the group"
},
{
"type": [
"null",
"string"
],
"name": "email",
"default": null,
"doc": "Email address to contact the group"
}
],
"doc": "Group information that can be edited from UI"
}
ownership
Ownership information of an entity.
Schema
{
"type": "record",
"Aspect": {
"name": "ownership"
},
"name": "Ownership",
"namespace": "com.linkedin.common",
"fields": [
{
"type": {
"type": "array",
"items": {
"type": "record",
"name": "Owner",
"namespace": "com.linkedin.common",
"fields": [
{
"Relationship": {
"entityTypes": [
"corpuser",
"corpGroup"
],
"name": "OwnedBy"
},
"Searchable": {
"addToFilters": true,
"fieldName": "owners",
"fieldType": "URN",
"filterNameOverride": "Owned By",
"hasValuesFieldName": "hasOwners",
"queryByDefault": false
},
"java": {
"class": "com.linkedin.common.urn.Urn"
},
"type": "string",
"name": "owner",
"doc": "Owner URN, e.g. urn:li:corpuser:ldap, urn:li:corpGroup:group_name, and urn:li:multiProduct:mp_name\n(Caveat: only corpuser is currently supported in the frontend.)"
},
{
"deprecated": true,
"type": {
"type": "enum",
"symbolDocs": {
"BUSINESS_OWNER": "A person or group who is responsible for logical, or business related, aspects of the asset.",
"CONSUMER": "A person, group, or service that consumes the data\nDeprecated! Use TECHNICAL_OWNER or BUSINESS_OWNER instead.",
"CUSTOM": "Set when ownership type is unknown or a when new one is specified as an ownership type entity for which we have no\nenum value for. This is used for backwards compatibility",
"DATAOWNER": "A person or group that is owning the data\nDeprecated! Use TECHNICAL_OWNER instead.",
"DATA_STEWARD": "A steward, expert, or delegate responsible for the asset.",
"DELEGATE": "A person or a group that overseas the operation, e.g. a DBA or SRE.\nDeprecated! Use TECHNICAL_OWNER instead.",
"DEVELOPER": "A person or group that is in charge of developing the code\nDeprecated! Use TECHNICAL_OWNER instead.",
"NONE": "No specific type associated to the owner.",
"PRODUCER": "A person, group, or service that produces/generates the data\nDeprecated! Use TECHNICAL_OWNER instead.",
"STAKEHOLDER": "A person or a group that has direct business interest\nDeprecated! Use TECHNICAL_OWNER, BUSINESS_OWNER, or STEWARD instead.",
"TECHNICAL_OWNER": "person or group who is responsible for technical aspects of the asset."
},
"deprecatedSymbols": {
"CONSUMER": true,
"DATAOWNER": true,
"DELEGATE": true,
"DEVELOPER": true,
"PRODUCER": true,
"STAKEHOLDER": true
},
"name": "OwnershipType",
"namespace": "com.linkedin.common",
"symbols": [
"CUSTOM",
"TECHNICAL_OWNER",
"BUSINESS_OWNER",
"DATA_STEWARD",
"NONE",
"DEVELOPER",
"DATAOWNER",
"DELEGATE",
"PRODUCER",
"CONSUMER",
"STAKEHOLDER"
],
"doc": "Asset owner types"
},
"name": "type",
"doc": "The type of the ownership"
},
{
"Relationship": {
"entityTypes": [
"ownershipType"
],
"name": "ownershipType"
},
"java": {
"class": "com.linkedin.common.urn.Urn"
},
"type": [
"null",
"string"
],
"name": "typeUrn",
"default": null,
"doc": "The type of the ownership\nUrn of type O"
},
{
"type": [
"null",
{
"type": "record",
"name": "OwnershipSource",
"namespace": "com.linkedin.common",
"fields": [
{
"type": {
"type": "enum",
"symbolDocs": {
"AUDIT": "Auditing system or audit logs",
"DATABASE": "Database, e.g. GRANTS table",
"FILE_SYSTEM": "File system, e.g. file/directory owner",
"ISSUE_TRACKING_SYSTEM": "Issue tracking system, e.g. Jira",
"MANUAL": "Manually provided by a user",
"OTHER": "Other sources",
"SERVICE": "Other ownership-like service, e.g. Nuage, ACL service etc",
"SOURCE_CONTROL": "SCM system, e.g. GIT, SVN"
},
"name": "OwnershipSourceType",
"namespace": "com.linkedin.common",
"symbols": [
"AUDIT",
"DATABASE",
"FILE_SYSTEM",
"ISSUE_TRACKING_SYSTEM",
"MANUAL",
"SERVICE",
"SOURCE_CONTROL",
"OTHER"
]
},
"name": "type",
"doc": "The type of the source"
},
{
"type": [
"null",
"string"
],
"name": "url",
"default": null,
"doc": "A reference URL for the source"
}
],
"doc": "Source/provider of the ownership information"
}
],
"name": "source",
"default": null,
"doc": "Source information for the ownership"
}
],
"doc": "Ownership information"
}
},
"name": "owners",
"doc": "List of owners of the entity."
},
{
"type": {
"type": "record",
"name": "AuditStamp",
"namespace": "com.linkedin.common",
"fields": [
{
"type": "long",
"name": "time",
"doc": "When did the resource/association/sub-resource move into the specific lifecycle stage represented by this AuditEvent."
},
{
"java": {
"class": "com.linkedin.common.urn.Urn"
},
"type": "string",
"name": "actor",
"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."
},
{
"java": {
"class": "com.linkedin.common.urn.Urn"
},
"type": [
"null",
"string"
],
"name": "impersonator",
"default": null,
"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."
},
{
"type": [
"null",
"string"
],
"name": "message",
"default": null,
"doc": "Additional context around how DataHub was informed of the particular change. For example: was the change created by an automated process, or manually."
}
],
"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."
},
"name": "lastModified",
"default": {
"actor": "urn:li:corpuser:unknown",
"impersonator": null,
"time": 0,
"message": null
},
"doc": "Audit stamp containing who last modified the record and when. A value of 0 in the time field indicates missing data."
}
],
"doc": "Ownership information of an entity."
}
origin
Carries information about where an entity originated from.
Schema
{
"type": "record",
"Aspect": {
"name": "origin"
},
"name": "Origin",
"namespace": "com.linkedin.common",
"fields": [
{
"type": {
"type": "enum",
"symbolDocs": {
"EXTERNAL": "The entity is external to DataHub.",
"NATIVE": "The entity is native to DataHub."
},
"name": "OriginType",
"namespace": "com.linkedin.common",
"symbols": [
"NATIVE",
"EXTERNAL"
],
"doc": "Enum to define where an entity originated from."
},
"name": "type",
"doc": "Where an entity originated from. Either NATIVE or EXTERNAL."
},
{
"type": [
"null",
"string"
],
"name": "externalType",
"default": null,
"doc": "Only populated if type is EXTERNAL. The externalType of the entity, such as the name of the identity provider."
}
],
"doc": "Carries information about where an entity originated from."
}
roleMembership
Carries information about which roles a user or group is assigned to.
Schema
{
"type": "record",
"Aspect": {
"name": "roleMembership"
},
"name": "RoleMembership",
"namespace": "com.linkedin.identity",
"fields": [
{
"Relationship": {
"/*": {
"entityTypes": [
"dataHubRole"
],
"name": "IsMemberOfRole"
}
},
"type": {
"type": "array",
"items": "string"
},
"name": "roles"
}
],
"doc": "Carries information about which roles a user or group is assigned to."
}
Relationships
Self
These are the relationships to itself, stored in this entity's aspects
- IsPartOf (via
corpGroupInfo.groups
) - OwnedBy (via
ownership.owners.owner
)
Outgoing
These are the relationships stored in this entity's aspects
OwnedBy
- Corpuser via
corpGroupInfo.admins
- Corpuser via
ownership.owners.owner
- Corpuser via
IsPartOf
- Corpuser via
corpGroupInfo.members
- Corpuser via
TaggedWith
- Tag via
globalTags.tags
- Tag via
ownershipType
- OwnershipType via
ownership.owners.typeUrn
- OwnershipType via
IsMemberOfRole
- DataHubRole via
roleMembership.roles
- DataHubRole via
Incoming
These are the relationships stored in other entity's aspects
OwnedBy
- Dataset via
ownership.owners.owner
- DataJob via
ownership.owners.owner
- DataFlow via
ownership.owners.owner
- DataProcess via
ownership.owners.owner
- Chart via
ownership.owners.owner
- Dashboard via
ownership.owners.owner
- Notebook via
ownership.owners.owner
- Dataset via
IsMemberOfGroup
- Corpuser via
groupMembership.groups
- Corpuser via
IsMemberOfNativeGroup
- Corpuser via
nativeGroupMembership.nativeGroups
- Corpuser via