Joan,

 

> Is there a way to put the reference without adding the name attribute in the 
> values of the "referenced entity"?

Atlas notification module was enhanced recently, with addition of V2 style 
notifications (ATLAS-2421). Data structures used in V2 notification would allow 
referencing an entity using its unique-name (as shown below), without having to 
provide other attributes of the entity. This enhancement was included in Apache 
Atlas 0.8.2, which was released on last month.  

 

Please review the sample V2 notification below, for the usecase discussed 
earlier in this thread. Hope this helps.

 

Sorry for the delay in responding to your question.

 

Regards,

Madhan

 

 

{

  "message": {

    "type": "ENTITY_CREATE_V2",

    "user": "user",

    "entities": {

      "entities": [

        {

          "guid":     "-14568879465268",

          "typeName": "database",

          "attributes": {

            "dbName":          "Test7",

            "description":     "Test db7",

            "name":            "Testdb7",

            "origin_app":      "origin",

            "origin_username": "externalusername",

            "owner":           "owner",

            "qualifiedName":   "Testdb5",

            "repository": {

              "typeName":      "repository",

              "qualifiedName": "repository01"

            }

          }

        }

      ],

      "referredEntities": {

      }

    }

  },

  "version": {

    "version": "1.0.0"

  }

}

 

 

 

 

 

From: Jo MailingList <[email protected]>
Reply-To: "[email protected]" <[email protected]>
Date: Tuesday, February 6, 2018 at 2:45 AM
To: "[email protected]" <[email protected]>
Subject: Re: Relating to an entity using uniqueAttributes

 

Hello, 

 

On the same topic, 

 

Now I realised that when refering to an object alredy created, is not enough to 
add the qualifiedName, but it also needs to include the name attribute since it 
is a required attribute. The point is that no matter which name I put, the 
actual referenced entity is updated to have that name.

 

Is there a way to put the reference without adding the name attribute in the 
values of the "referenced entity"?

 

Thank you very much,

 

Best regards,

 

Joan

 

2018-01-05 14:24 GMT+01:00 Jo MailingList <[email protected]>:

Hello, 

 

Thank you very much,

 

This has been of great help.

 

Best regards,

 

Joan

 

2018-01-05 9:05 GMT+01:00 Madhan Neethiraj <[email protected]>:

Joan,

 

A slightly better approach is to provide repository entity as a separate entry 
in “entities” and refer to the repository in database entity using its temp-id, 
as shown below.

 

This approach will allow an entity be referenced from multiple entities using 
its temp-id (instead of adding the entire entity details in each such 
reference).

 

Madhan

 

{

  "message": {

    "type": "ENTITY_FULL_UPDATE",

    "user": "user",

    "entities": [

      {

        "jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Reference",

        "id": {

          "jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Id",

          "id":        "-14568879465268",

          "typeName":  "database",

          "state":     "ACTIVE",

          "version":   0

        },

        "typeName": "database",

        "values": {

          "dbName":          "Test7",

          "description":     "Test db7",

          "name":            "Testdb7",

          "origin_app":      "origin",

          "origin_username": "externalusername",

          "owner":           "owner",

          "qualifiedName":   "Testdb5",

          "repository": {

            "jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Id",

            "id":        "-14568879465269",

            "typeName":  "repository",

            "state":     "ACTIVE",

            "version":   0

          }

        },

        "traitNames": [],

        "traits": {}

      },

      {

        "jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Reference",

        "id": {

          "jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Id",

          "id":        "-14568879465269",

          "typeName":  "repository",

          "state":     "ACTIVE",

          "version":   0

        },

        "typeName": "repository",

        "values": {

          "qualifiedName": "repository01"

        },

        "traitNames": [],

        "traits": {}

      }

    ]

  },

  "version": {

    "version": "1.0.0"

  }

}

 

From: Madhan Neethiraj <[email protected]>
Date: Thursday, January 4, 2018 at 11:18 PM
To: "[email protected]" <[email protected]>
Subject: Re: Relating to an entity using uniqueAttributes

 

Joan,

 

To refer to another entity In Atlas hook notifications, add the referred entity 
details as shown below. Also, I would suggest using ENTITY_FULL_UPDATE as 
message type (instead of ENTITY_CREATE).

 

{

  "message": {

    "type": "ENTITY_FULL_UPDATE",

    "user": "user",

    "entities": [

      {

        "jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Reference",

        "id": {

          "jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Id",

          "id":        "-14568879465268",

          "typeName":  "database",

          "state":     "ACTIVE",

          "version":   0

        },

        "typeName": "database",

        "values": {

          "dbName":          "Test7",

          "description":     "Test db7",

          "name":            "Testdb7",

          "origin_app":      "origin",

          "origin_username": "externalusername",

          "owner":           "owner",

          "qualifiedName":   "Testdb5",

          "repository": {

            "jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Reference",

            "id": {

              "jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Id",

              "id":        "-14568879465269",

              "typeName":  "repository",

              "state":     "ACTIVE",

              "version":   0

            },

            "typeName": "repository",

            "values": {

              "qualifiedName": "repository01"

            },

            "traitNames": [],

            "traits": {}

          }

        },

        "traitNames": [],

        "traits": {}

      }

    ]

  },

  "version": {

    "version": "1.0.0"

  }

}

 

Hope this helps.

 

Madhan

 

 

 

 

From: Jo MailingList <[email protected]>
Reply-To: "[email protected]" <[email protected]>
Date: Tuesday, January 2, 2018 at 9:54 AM
To: "[email protected]" <[email protected]>
Subject: Relating to an entity using uniqueAttributes

 

Hello everyone, 

 

I am trying to create a database that in my type model has a reference to a 
repository. I want to create it by sending a message to the ATLAS_HOOK topic to 
the Kafka broker as follows:

 

{

"version": {

"version": "1.0.0"

},

"message": {

"entities": [{

"jsonClass": 
"org.apache.atlas.typesystem.json.InstanceSerialization$_Reference",

"id": {

"jsonClass": "org.apache.atlas.typesystem.json.InstanceSerialization$_Id",

"id": "-14568879465268",

"version": 0,

"typeName": "database",

"state": "ACTIVE"

},

"typeName": "database",

"values": {

"qualifiedName": "Testdb5",

"repository": {

"jsonClass":"org.apache.atlas.typesystem.json.InstanceSerialization$_Id"

"version": 0,

"typeName": "repository",

"uniqueAttributes": {

"qualifiedName": "repository01"

},

"state": "ACTIVE"

},

"owner": "owner",

"description": "Test db7",

"name": "Testdb7",

"dbName": "Test7",

"origin_app": "origin",

"origin_username": "externalusername"

},

"traitNames": [],

"traits": {}

}],

"type": "ENTITY_CREATE",

"user": "user"

}

}

 

The database type expects a repository attribute of the type repository as a 
reference. It works when I give the guid of the reference directly but when 
trying my example it fails and it seems to me that it does not process the 
information I provide as uniqueAttributes. What I see in the application.log is 
the following stacktrace:

 

org.apache.atlas.exception.AtlasBaseException: ObjectId is not valid 
AtlasObjectId{guid='null', typeName='repository', uniqueAttributes={}}

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityGraphDiscoveryV1.visitReference(AtlasEntityGraphDiscoveryV1.java:186)

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityGraphDiscoveryV1.visitAttribute(AtlasEntityGraphDiscoveryV1.java:234)

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityGraphDiscoveryV1.visitEntity(AtlasEntityGraphDiscoveryV1.java:327)

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityGraphDiscoveryV1.walkEntityGraph(AtlasEntityGraphDiscoveryV1.java:354)

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityGraphDiscoveryV1.discover(AtlasEntityGraphDiscoveryV1.java:142)

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityGraphDiscoveryV1.discoverEntities(AtlasEntityGraphDiscoveryV1.java:69)

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityStoreV1.preCreateOrUpdate(AtlasEntityStoreV1.java:523)

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityStoreV1.createOrUpdate(AtlasEntityStoreV1.java:174)

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityStoreV1.createOrUpdate(AtlasEntityStoreV1.java:193)

        at 
org.apache.atlas.repository.store.graph.v1.AtlasEntityStoreV1$$FastClassBySpringCGLIB$$80c00649.invoke(<generated>)

 

This message makes me suspicious that Atlas is not processing my input message 
correctly and not reading my uniqueAttributes information.

 

Does someone have a hint of what I am doing wrong or if this is a currrent 
issue inside Atlas or it is not a supported feature right now?

 

Thank you very much,

 

Best regards,

 

Joan

 

 

 

 

Reply via email to