Catalog Source Configuration > Custom metadata integration > Example: Ingest metadata from Microsoft Access database
  

Example: Ingest metadata from Microsoft Access database

You are a data analyst in your organization and you need to prepare a report on the annual sales on your e-commerce website. The data that is required to prepare the report is stored in Microsoft Access database and you are expected to ingest the data from Microsoft Access database into Data Governance and Catalog. Since Metadata Command Center does not provide a predefined source system for Microsoft Access database, you can create a custom catalog source to ingest metadata from this specific source system into the catalog.
In this example, let's define a custom model and update the metadata definition files to ingest metadata from Microsoft Access database. For the complete workflow of ingesting metadata from a custom source system, see Workflow for custom metadata integration.

Define the custom model

To create a custom model, you can either reuse a system model or download the template model definition file. See Step 1. Create a custom model.
In the custom model JSON file for Microsoft Access database, define the appropriate classes, attributes, and associations.

Classes

Define the following classes in the custom model for Microsoft Access database:
Class
Type
AccessSchema
Schema
AccessTable
Table
AccessTableColumn
Column
AccessView
View
AccessViewColumn
View column

Attributes

Define the following attributes in the custom model for Microsoft Access database:
Attribute
Data Type
Name
String
Abbreviation
String
Business Usage
String
DateCreated
String
Datatype
String
Length
String

Associations

Define the following attributes in the custom model for Microsoft Access database:
Association
Association Type
AccessSchemaAccessTable
Parent-child
AccessTableAccessTableColumn
Parent-child
AccessSchemaAccessView
Parent-child
AccessViewAccessViewColumn
Parent-child

Sample custom model JSON file

The following JSON file is the sample custom model for Microsoft Access database. It defines classes, attributes, and associations for the Microsoft Access database from which you want to extract metadata:
{
"packageName": "relational.accessdb",
"packageLabel": "Access DB Objects",
"packageDescription": "Model for Access DB Objects",
"deprecated": false,
"attributes": [{
"name": "Name",
"label": "Name1",
"dataType": "core.String",
"description": "",
"multivalued": false,
"deprecated": false,
"derived": false,
"data": false,
"isCustom": false,
"defaultValues": [],
"isSystem": false,
"embedded": false,
"searchConfiguration": {
"suggestable": false,
"aggregatable": false,
"sortable": false,
"attributeType": "VIEWABLE"
}
},
{
"name": "Abbreviation",
"label": "Abbreviation",
"dataType": "core.String",
"description": "",
"multivalued": false,
"deprecated": false,
"derived": false,
"data": false,
"isCustom": false,
"defaultValues": [],
"isSystem": false,
"embedded": false,
"searchConfiguration": {
"suggestable": false,
"aggregatable": false,
"sortable": false,
"attributeType": "VIEWABLE"
}
},
{
"name": "BusinessUsage",
"label": "Business Usage",
"dataType": "core.String",
"description": "",
"multivalued": false,
"deprecated": false,
"derived": false,
"data": false,
"isCustom": false,
"defaultValues": [],
"isSystem": false,
"embedded": false,
"searchConfiguration": {
"suggestable": false,
"aggregatable": false,
"sortable": false,
"attributeType": "VIEWABLE"
}
},
{
"name": "DateCreated",
"label": "Date Created",
"dataType": "core.String",
"description": "",
"multivalued": false,
"deprecated": false,
"derived": false,
"data": false,
"isCustom": false,
"defaultValues": [],
"isSystem": false,
"embedded": false,
"searchConfiguration": {
"suggestable": false,
"aggregatable": false,
"sortable": false,
"attributeType": "VIEWABLE"
}
},
{
"name": "Datatype",
"label": "Datatype",
"dataType": "core.String",
"description": "",
"multivalued": false,
"deprecated": false,
"derived": false,
"data": false,
"isCustom": false,
"defaultValues": [],
"isSystem": false,
"embedded": false,
"searchConfiguration": {
"suggestable": false,
"aggregatable": false,
"sortable": false,
"attributeType": "VIEWABLE"
}
},
{
"name": "Length",
"label": "Length",
"dataType": "core.String",
"description": "",
"multivalued": false,
"deprecated": false,
"derived": false,
"data": false,
"isCustom": false,
"defaultValues": [],
"isSystem": false,
"embedded": false,
"searchConfiguration": {
"suggestable": false,
"aggregatable": false,
"sortable": false,
"attributeType": "VIEWABLE"
}
}
],
"associationAttributes": [],
"associationKinds": [],
"referenceAttributes": [],
"version": 1,
"modifiedBy": "",
"referenceDataTypes": [],
"requiredPackages": [],
"classes": [{
"name": "AccessSchema",
"label": "Access Schema",
"description": "",
"isFirstClass": true,
"isAbstract": false,
"superClasses": [
"core.DataSource"
],
"deprecated": false,
"indexType": "FULL",
"appendOnly": true
},
{
"name": "AccessTable",
"label": "Access Table",
"description": "",
"isFirstClass": true,
"isAbstract": false,
"superClasses": [
"core.DataSet"
],
"deprecated": false,
"indexType": "FULL",
"appendOnly": true
},
{
"name": "AccessTableColumn",
"label": "Access Table Column",
"description": "",
"isFirstClass": true,
"isAbstract": false,
"superClasses": [
"core.DataElement"
],
"deprecated": false,
"indexType": "FULL",
"appendOnly": true
},
{
"name": "AccessView",
"label": "Access View",
"description": "",
"isFirstClass": true,
"isAbstract": false,
"superClasses": [
"core.DataSet"
],
"deprecated": false,
"indexType": "FULL",
"appendOnly": true
},
{
"name": "AccessViewColumn",
"label": "Access View Column",
"description": "",
"isFirstClass": true,
"isAbstract": false,
"superClasses": [
"core.DataElement"
],
"deprecated": false,
"indexType": "FULL",
"appendOnly": true
}
],
"classAttributes": [{
"className": "relational.accessdb.AccessSchema",
"attributeName": "relational.accessdb.Name",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessSchema",
"attributeName": "relational.accessdb.Abbreviation",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessSchema",
"attributeName": "relational.accessdb.BusinessUsage",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessSchema",
"attributeName": "relational.accessdb.DateCreated",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessSchema",
"attributeName": "relational.accessdb.Datatype",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessSchema",
"attributeName": "relational.accessdb.Length",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTable",
"attributeName": "relational.accessdb.Name",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTable",
"attributeName": "relational.accessdb.Abbreviation",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTable",
"attributeName": "relational.accessdb.BusinessUsage",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTable",
"attributeName": "relational.accessdb.DateCreated",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTable",
"attributeName": "relational.accessdb.Datatype",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTable",
"attributeName": "relational.accessdb.Length",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTableColumn",
"attributeName": "relational.accessdb.Name",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTableColumn",
"attributeName": "relational.accessdb.Abbreviation",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTableColumn",
"attributeName": "relational.accessdb.BusinessUsage",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTableColumn",
"attributeName": "relational.accessdb.DateCreated",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTableColumn",
"attributeName": "relational.accessdb.Datatype",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessTableColumn",
"attributeName": "relational.accessdb.Length",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessView",
"attributeName": "relational.accessdb.Name",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessView",
"attributeName": "relational.accessdb.Abbreviation",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessView",
"attributeName": "relational.accessdb.BusinessUsage",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessView",
"attributeName": "relational.accessdb.DateCreated",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessView",
"attributeName": "relational.accessdb.Datatype",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessView",
"attributeName": "relational.accessdb.Length",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessViewColumn",
"attributeName": "relational.accessdb.Name",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessViewColumn",
"attributeName": "relational.accessdb.Abbreviation",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessViewColumn",
"attributeName": "relational.accessdb.BusinessUsage",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessViewColumn",
"attributeName": "relational.accessdb.DateCreated",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessViewColumn",
"attributeName": "relational.accessdb.Datatype",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
},
{
"className": "relational.accessdb.AccessViewColumn",
"attributeName": "relational.accessdb.Length",
"isRequired": false,
"isCuratable": false,
"deprecated": false,
"followers": [],
"isHidden": false,
"cdc": false
}

],
"associations": [{
"name": "AccessSchemaAccessTable",
"label": "AccessSchemaAccessTable",
"description": "",
"fromClass": "relational.accessdb.AccessSchema",
"toClass": "relational.accessdb.AccessTable",
"fromLabel": "AccessSchema",
"toLabel": "AccessTable",
"associationKinds": [
"core.ParentChild"
],
"deprecated": false,
"unidirectional": false,
"aggregate": false
},
{
"name": "AccessTableAccessTableColumn",
"label": "AccessTableAccessTableColumn",
"description": "",
"fromClass": "relational.accessdb.AccessTable",
"toClass": "relational.accessdb.AccessTableColumn",
"fromLabel": "AccessTable",
"toLabel": "AccessTableColumn",
"associationKinds": [
"core.ParentChild"
],
"deprecated": false,
"unidirectional": false,
"aggregate": false
},
{
"name": "AccessSchemaAccessView",
"label": "AccessSchemaAccessView",
"description": "",
"fromClass": "relational.accessdb.AccessSchema",
"toClass": "relational.accessdb.AccessView",
"fromLabel": "AccessSchema",
"toLabel": "AccessView",
"associationKinds": [
"core.ParentChild"
],
"deprecated": false,
"unidirectional": false,
"aggregate": false
},
{
"name": "AccessViewAccessViewColumn",
"label": "AccessViewAccessViewColumn",
"description": "",
"fromClass": "relational.accessdb.AccessView",
"toClass": "relational.accessdb.AccessViewColumn",
"fromLabel": "AccessView",
"toLabel": "AccessViewColumn",
"associationKinds": [
"core.ParentChild"
],
"deprecated": false,
"unidirectional": false,
"aggregate": false
}
]
}

Update the metadata definition files

Before you create the custom catalog source for Microsoft Access database, update the metadata definition files and enter the details of the metadata that you want to ingest from Microsoft Access database. To begin creating the metadata definition files, download and use the metadata files template. See Step 5. Prepare the custom metadata source.

Enter object details

The metadata template ZIP file for Microsoft Access database contains multiple object files in the CSV format. These object files represent the classes that you defined in the custom model. The object file names are in the format <package name>.<class name>. For example, relational.accessdb.AccessSchema.
Open each CSV file in any text editor, enter the following details for each class, and save the file:
Note that the core.externalId and core.name are mandatory fields in each file.
Object file
core.externalId
core.name
core.description
relational.accessdb.Name
relational.accessdb.Abbreviation
relational.accessdb.BusinessUsage
relational.accessdb.DateCreated
relational.ccessdb.Datatype
relational.accessdb.Length
relational.accessdb.AccessSchema
HERMES
HERMES
This is a schema
HERMES
HRM
Accounts
8/18/2017
String
25
relational.accessdb.AccessTable
HERMES/CUSTOMER
CUSTOMER
This is a table
CUSTOMER
CUST
CustomerAccounts
8/18/2017
String
25
relational.accessdb.AccessTableColumn
HERMES/CUSTOMER/CUSTOMER_ID
CUSTOMER_ID
This is a table column
CUSTOMER_ID
ID
CustomerAccountsId
8/18/2017
String
25
relational.accessdb.AccessView
HERMES/V_CUSTOMER
V_CUSTOMER
This is a view
V_CUSTOMER
V_CUST
CustomerAccountView
8/18/2017
String
25
relational.accessdb.AccessViewColumn
HERMES/V_CUSTOMER/V_CUSTOMER_ID
V_CUSTOMER_ID
This is a view column
V_CUSTOMER_ID
V_CUST_ID
CustomerAccountViewId
8/18/2017
String
25

Enter association details

Open the links.csv file in any text editor. Enter the association details for the objects in Microsoft Access database as shown in the following table, and save the links.csv file:
Source
Target
Association
HERMES
HERMES/CUSTOMER
relational.accessdb.AccessSchemaAccessTable
HERMES
HERMES/V_CUSTOMER
relational.accessdb.AccessSchemaAccessView
HERMES/CUSTOMER
HERMES/CUSTOMER/CUSTOMER_ID
relational.accessdb.AccessTableAccessTableColumn
HERMES/CUSTOMER
HERMES/CUSTOMER/CUSTOMER_NAME
relational.accessdb.AccessTableAccessTableColumn
HERMES/V_CUSTOMER
HERMES/V_CUSTOMER/V_CUSTOMER_ID
relational.accessdb.AccessViewAccessViewColumn
$resource
HERMES
core.ResourceParentChild
HERMES/CUSTOMER
HERMES/V_CUSTOMER
core.DataSetDataFlow
HERMES/CUSTOMER/CUSTOMER_ID
HERMES/V_CUSTOMER/V_CUSTOMER_ID
core.DirectionalDataFlow
After updating the files, add all the object CSV files and the links.csv file in a ZIP file and provide the ZIP file when you create the custom catalog source.