scalar Long schema { query: Query mutation: Mutation } type Query { dataset(urn: String!): Dataset user(urn: String!): CorpUser search(input: SearchInput!): SearchResults autoComplete(input: AutoCompleteInput!): AutoCompleteResults browse(input: BrowseInput!): BrowseResults browsePaths(input: BrowsePathsInput!): [[String!]!] } type Mutation { logIn(username: String!, password: String!): CorpUser updateDataset(input: DatasetUpdateInput!): Dataset } input DatasetUpdateInput { urn: String! ownership: OwnershipUpdate } input OwnershipUpdate { owners: [OwnerUpdate!] } input OwnerUpdate { # The owner URN, eg urn:li:corpuser:1 owner: String! # The owner role type type: OwnershipType! } enum OwnershipSourceType { AUDIT DATABASE FILE_SYSTEM ISSUE_TRACKING_SYSTEM MANUAL SERVICE SOURCE_CONTROL OTHER } type OwnershipSource { """ The type of the source """ type: OwnershipSourceType! """ A reference URL for the source """ url: String } enum OwnershipType { """ A person or group that is in charge of developing the code """ DEVELOPER """ A person or group that is owning the data """ DATAOWNER """ A person or a group that overseas the operation, e.g. a DBA or SRE. """ DELEGATE """ A person, group, or service that produces/generates the data """ PRODUCER """ A person, group, or service that consumes the data """ CONSUMER """ A person or a group that has direct business interest """ STAKEHOLDER } type Owner { """ Owner object """ owner: CorpUser! """ The type of the ownership """ type: OwnershipType """ Source information for the ownership """ source: OwnershipSource } type Ownership { owners: [Owner!] lastModified: Long! } enum FabricType { """ Designates development fabrics """ DEV """ Designates early-integration (staging) fabrics """ EI """ Designates production fabrics """ PROD """ Designates corporation fabrics """ CORP } enum PlatformNativeType { """ Table """ TABLE """ View """ VIEW """ Directory in file system """ DIRECTORY """ Stream """ STREAM """ Bucket in key value store """ BUCKET } type PropertyTuple { key: String! value: String } type SubTypes { typeNames: [String!] } type Dataset { urn: String! platform: String! name: String! origin: FabricType! description: String uri: String platformNativeType: PlatformNativeType tags: [String!]! properties: [PropertyTuple!] createdTime: Long! modifiedTime: Long! ownership: Ownership subTypes: SubTypes } type CorpUserInfo { active: Boolean! displayName: String email: String! title: String manager: CorpUser departmentId: Long departmentName: String firstName: String lastName: String fullName: String countryCode: String } type CorpUserEditableInfo { aboutMe: String teams: [String!] skills: [String!] pictureLink: String } type CorpUser { urn: String! username: String! info: CorpUserInfo editableInfo: CorpUserEditableInfo } type CorpGroup implements Entity { """ The unique user URN """ urn: String! """ GMS Entity Type """ type: EntityType! """ group name e.g. wherehows-dev, ask_metadata """ name: String """ Information of the corp group """ info: CorpGroupInfo } type CorpGroupInfo { """ email of this group """ email: String! """ owners of this group """ admins: [String!]! """ List of ldap urn in this group. """ members: [String!]! """ List of groups in this group. """ groups: [String!]! } enum EntityType { DATASET USER DATA_FLOW DATA_JOB CORP_USER CORP_GROUP } # Search Input input SearchInput { type: EntityType! query: String! start: Int count: Int filters: [FacetFilterInput!] } input FacetFilterInput { field: String! # Facet Field Name value: String! # Facet Value } # Search Output type SearchResults { start: Int! count: Int! total: Int! elements: [SearchResult!]! facets: [FacetMetadata!] } union SearchResult = Dataset | CorpUser type FacetMetadata { field: String! aggregations: [AggregationMetadata!]! } type AggregationMetadata { value: String! count: Long! } # Autocomplete Input input AutoCompleteInput { type: EntityType! query: String! field: String # Field name limit: Int filters: [FacetFilterInput!] } # Autocomplete Output type AutoCompleteResults { query: String! suggestions: [String!]! } # Browse Inputs input BrowseInput { type: EntityType! path: [String!] start: Int count: Int filters: [FacetFilterInput!] } # Browse Output type BrowseResults { entities: [BrowseResultEntity!]! start: Int! count: Int! total: Int! metadata: BrowseResultMetadata! } type BrowseResultEntity { name: String! urn: String! } type BrowseResultMetadata { path: [String!] groups: [BrowseResultGroup!]! totalNumEntities: Long! } type BrowseResultGroup { name: String! count: Long! } # Browse Paths Input input BrowsePathsInput { type: EntityType! urn: String! }