You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@atlas.apache.org by "Madhan Neethiraj (Jira)" <ji...@apache.org> on 2019/12/05 03:29:00 UTC

[jira] [Commented] (ATLAS-3546) isOptional for composition relationship category?

    [ https://issues.apache.org/jira/browse/ATLAS-3546?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16988422#comment-16988422 ] 

Madhan Neethiraj commented on ATLAS-3546:
-----------------------------------------

[~api123] - about the first scenario: to create a single rdbms_column, providing object-id of an existing rdbms_table entity should be enough; there should be no need to provide rdbms_instance/rdbms_db/... For example:
{noformat}
{
  "guid":     "-1",
  "typeName": "rdbms_column",
  "attributes": {
    "name":          "id",
    "qualifiedName": "sales.order_items.id@prod",
    "data_type":     "long",
    "isPrimaryKey":  false
  },
  "relationshipAttributes": {
    "table": {
      "relationshipType": "rdbms_table_columns",
      "typeName":         "rdbms_table",
      "uniqueAttributes": {
        "qualifiedName": "sales.order_items@prod"
      }
    }
  }
}
{noformat}

For the second scenario, perhaps you can consider modeling this as an aggregation. Composition, by definition needs a container entity to be present for a contained entity to exist. If this constraint can't be met, then perhaps the relationship shouldn't be modeled as composition.

You might also want to consider the enhancement added in ATLAS-3405, which will create a shell/empty entity for non-existing object-references. In your example, if rdbms_table with {{qualifiedName=sales.order_items@prod doesn't exist}}, Atlas will create an shell entity for the rdbms_table (with only qualifiedName attribute populated), and create rdbms_column entity with link to the created table entity. The table entity can be populated later in a subsequent call. Note that configuration {{atlas.rest.create.shell.entity.for.non-existing.ref=true}} should be set for the above handling; else Atlas will fail creation of the column entity.

> isOptional for composition relationship category?
> -------------------------------------------------
>
>                 Key: ATLAS-3546
>                 URL: https://issues.apache.org/jira/browse/ATLAS-3546
>             Project: Atlas
>          Issue Type: Improvement
>          Components:  atlas-core
>    Affects Versions: 2.0.0
>            Reporter: charles shen
>            Priority: Major
>
> I noticed since [ATLAS-3051|https://issues.apache.org/jira/browse/ATLAS-3051], the relationship attribute must be specified in the end def which is not container and relationship category is composition. 
> I understand it's to prohibit orphan children but is it too strong? Reason below:
>  # I have to provide all the entities along the relationship path in the payload when creating a child, eg, for RDBMS, I have to provide rdbms_instance, rdbms_db, rdbms_table, rdbms_column where I just want to create a single rdbms_column, it brings performance overhead to check existence of rdbms_instance, rdbms_db, etc..., 
>  # I have defined a composition relationship type where each end is the same entity type, it couldn't be created successfully anymore since it always requires the mandatory attribute where it's the same type and then falls into infinite loop.
> Three possible fixes:
>  # Remove the isOptional constraint, since ownedRef/inverseRef doesn't have such constraint.
>  # Add isOptional to relationship type end def.
>  # Add option in Rest to ignore the isOptional constraint for relationship type.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)