다음을 통해 공유


REST API를 사용하여 관계 만들기 및 가져오기

이 자습서에서는 Purview REST API를 사용하여 다음을 하는 방법을 알아봅니다.

  1. 데이터 자산 간에 자산 및 계보 관계를 만듭니다.
  2. 계보 관계/경로를 쿼리합니다.

이 문서에서 참조하는 API는 다음과 같습니다.

필수 구성 요소

이러한 API를 사용하려면 데이터 큐레이터 및 데이터 판독기 역할이 필요합니다. 액세스 토큰을 가져오는 방법에 대한 자세한 내용은 이 자습서 를 참조하세요.

개념

자산

Purview에는 DataSet 및 Process라는 두 가지 유형의 기본 자산이 있습니다.

  • Azure SQL Table, Oracle Table 등과 같은 데이터를 포함하는 DataSet 자산은 DataSet에서 상속되어야 합니다.
  • 데이터 파이프라인, 쿼리, 함수 등과 같은 데이터를 처리하는 프로세스 자산은 Process에서 상속되어야 합니다.

데이터 세트 프로세스의 형식 정의를 이해하려면 자산 및 형식을 참조하세요.

계보 & 관계

Microsoft Purview에서는 계보에 대한 세 가지 유형의 관계를 정의합니다.

  • dataset_process_inputs: DataSet를 프로세스에 연결합니다. 즉, DataSet은 프로세스의 입력입니다.
  • process_dataset_outputs: Process를 DataSet에 연결합니다. 즉, 프로세스에서 DataSet을 생성합니다.
  • direct_lineage_dataset_dataset: DataSet1을 DataSet2에 연결합니다. 즉, DataSet1은 DataSet2의 업스트림. 그 사이에 어떤 프로세스가 있는지는 정확히 알 수 없습니다.

예제 1:다음은 데이터 세트 2개, 프로세스 1개, 계보 관계 2개가 있는 계보의 예입니다.

데이터 세트 ---> dataset_process_inputs ---> 프로세스 ---> process_dataset_outputs ---> DataSet

DataSet to Process to DataSet 계보를 보여 주는 스크린샷

예제 2:데이터 세트 2개와 계보 관계가 1개 있는 계보의 또 다른 예:

데이터 세트 ---> direct_lineage_dataset_dataset ---> DataSet

DataSet 계보에 대한 DataSet을 보여 주는 스크린샷

데이터 자산 간에 자산 및 계보 관계 만들기

다음 섹션에서는 hive_table DataSet의 예제 형식으로 사용하고 hive_query_process 프로세스의 예제 형식으로 살펴보겠습니다. 이러한 두 형식으로 자산을 만들고 그 사이에 계보를 만듭니다. DataSet 또는 Process에서 상속되는 다른 형식을 사용하여 계보를 만들 수 있습니다.

예 1

API를 통해 자산 만들기

계보를 만들려는 자산이 Microsoft Purview에서 아직 만들어지지 않은 경우 다음 API를 호출하여 만들 수 있습니다.

API: 자산 대량 만들기

작업: 두 개의 hive_tables 데이터 세트로 만듭니다. table1과 table2는 각각 2개의 hive_columns- column1 및 column2입니다.

POST {endpoint}/datamap/api/atlas/v2/entity/bulk

본문과 함께:

{
  "entities": [
    {
      "typeName": "hive_table",
      "attributes": {
        "qualifiedName": "test_lineage.table1",
        "name": "table1"
      },
      "relationshipAttributes": {
        "columns": [
          {
            "guid": "-11",
            "typeName": "hive_column"
          },{
            "guid": "-12",
            "typeName": "hive_column"
          }
        ]
      },
      "guid": "-1"
    },
    {
      "typeName": "hive_column",
      "attributes": {
        "qualifiedName": "test_lineage.table1#column1",
        "name": "column1",
        "type": "int"
      },
      "guid": "-11",
      "relationshipAttributes": {
        "table": {
          "guid": "-1",
          "typeName": "hive_table"
        }
      }
    },
    {
      "typeName": "hive_column",
      "attributes": {
        "qualifiedName": "test_lineage.table1#column2",
        "name": "column2",
        "type": "int"
      },
      "guid": "-12",
      "relationshipAttributes": {
        "table": {
          "guid": "-1",
          "typeName": "hive_table"
        }
      }
    },
    {
      "typeName": "hive_table",
      "attributes": {
        "qualifiedName": "test_lineage.table2",
        "name": "table2"
      },
      "relationshipAttributes": {
        "columns": [
          {
            "guid": "-21",
            "typeName": "hive_column"
          },{
            "guid": "-22",
            "typeName": "hive_column"
          }
        ]
      },
      "guid": "-2"
    },
    {
      "typeName": "hive_column",
      "attributes": {
        "qualifiedName": "test_lineage.table2#column1",
        "name": "column1",
        "type": "int"
      },
      "guid": "-21",
      "relationshipAttributes": {
        "table": {
          "guid": "-2",
          "typeName": "hive_table"
        }
      }
    },
    {
      "typeName": "hive_column",
      "attributes": {
        "qualifiedName": "test_lineage.table2#column2",
        "name": "column2",
        "type": "int"
      },
      "guid": "-22",
      "relationshipAttributes": {
        "table": {
          "guid": "-2",
          "typeName": "hive_table"
        }
      }
    }    
  ]
}

작업: 프로세스 자산 'hive_view_query' 만들기

POST {endpoint}/datamap/api/atlas/v2/entity/bulk

본문과 함께:

{
  "entities": [
    {
      "typeName": "hive_view_query",
      "attributes": {
        "qualifiedName": "test_lineage.HiveQuery1",
        "name": "HiveQuery1",
        "columnMapping": "[{\"DatasetMapping\":{\"Source\":\"test_lineage.table1\",\"Sink\":\"test_lineage.table2\"},\"ColumnMapping\":[{\"Source\":\"column1\",\"Sink\":\"column1\"},{\"Source\":\"column2\",\"Sink\":\"column2\"}]}]"
      },
      "guid": "-1"
    }
  ]
}

위의 API 호출은 두 개의 hive_tables(데이터 세트)와 1개의 hive_view_query(Process)를 만듭니다.

데이터 세트와 프로세스 간의 계보 관계 만들기

API: 관계 만들기

작업: table1 -> HiveQuery1에서 계보 만들기(즉, 데이터 세트 -> 프로세스)

POST {endpoint}/datamap/api/atlas/v2/relationship

본문과 함께:

{
        "typeName": "dataset_process_inputs",
        "guid": "-1",
        "end1": {
            "typeName": "hive_table",
            "uniqueAttributes": {
                "qualifiedName": "test_lineage.table1"
            }
        },
        "end2": {
            "typeName": "Process",
            "uniqueAttributes": {
                "qualifiedName": "test_lineage.HiveQuery1"
            }
        }
}

작업: HiveQuery1에서 계보 만들기 -> table2(즉, 프로세스 -> 데이터 세트)

POST {endpoint}/datamap/api/atlas/v2/relationship

본문과 함께:

{
        "typeName": "process_dataset_outputs",
        "guid": "-2",
        "end1": {
            "typeName": "Process",
            "uniqueAttributes": {
                "qualifiedName": "test_lineage.HiveQuery1"
            }
        },
        "end2": {
            "typeName": "hive_table",
            "uniqueAttributes": {
                "qualifiedName": "test_lineage.table2"
            }
        }
}

계보 보기

자산 및 계보 관계가 만들어지면 Microsoft Purview에서 계보 그래프를 검사 수 있습니다.

DataSet-Process-DataSet 계보.

예 2

두 개의 열이 있는 hive 테이블 table3 만들기

API: 자산 대량 만들기

작업: 2개 hive_columns, column1 및 column2를 사용하여 table3 만들기

POST {endpoint}/datamap/api/atlas/v2/entity/bulk

본문과 함께:

{
"entities": [
    {
      "typeName": "hive_table",
      "attributes": {
        "qualifiedName": "test_lineage.table3",
        "name": "table3"
      },
      "relationshipAttributes": {
        "columns": [
          {
            "guid": "-31",
            "typeName": "hive_column"
          },{
            "guid": "-32",
            "typeName": "hive_column"
          }
        ]
      },
      "guid": "-3"
    },
    {
      "typeName": "hive_column",
      "attributes": {
        "qualifiedName": "test_lineage.table3#column1",
        "name": "column1",
        "type": "int"
      },
      "guid": "-31",
      "relationshipAttributes": {
        "table": {
          "guid": "-3",
          "typeName": "hive_table"
        }
      }
    },
    {
      "typeName": "hive_column",
      "attributes": {
        "qualifiedName": "test_lineage.table3#column2",
        "name": "column2",
        "type": "int"
      },
      "guid": "-32",
      "relationshipAttributes": {
        "table": {
          "guid": "-3",
          "typeName": "hive_table"
        }
      }
    }
   ]
}

열 매핑을 사용하여 표 2와 테이블 3 사이에 직접 계보 만들기

API: 관계 만들기

작업: 열 매핑을 사용하여 table2 -> table3(즉, 데이터 세트 -> 데이터 세트)에서 계보 만들기

POST {endpoint}/datamap/api/atlas/v2/relationship

본문과 함께:

{
    "typeName": "direct_lineage_dataset_dataset",
    "guid": "-1",
    "end1": {
        "typeName": "hive_table",
        "uniqueAttributes": {
            "qualifiedName": "test_lineage.table2"
        }
    },
    "end2": {
        "typeName": " hive_table ",
        "uniqueAttributes": {
            "qualifiedName": "test_lineage.table3"
        }
    },
    "attributes": {
      "columnMapping": "[{\"Source\":\"column1\",\"Sink\":\"column1\"},{\"Source\":\"column2\",\"Sink\":\"column2\"}]"
    }
}

계보 보기

이제 계보 그래프(예제 1 & 위의 예제 2와 함께)가 됩니다.

DataSet에서 DataSet 계보로.

table2는 두 테이블 사이에 HiveQuery가 없으면 table3에 직접 연결됩니다.

계보 관계/경로 쿼리

API: GUID로 계보 가져오기

작업: REST API를 통해 table2 계보 가져오기

GET {{endpoint}}/api/atlas/v2/lineage/{{guid_of_table2}}?direction=BOTH

아래에서 JSON 응답 페이로드를 수행할 수 있습니다.

{
    "baseEntityGuid": "2a12b3ff-5816-4222-833a-035bf82e06e0",
    "lineageDirection": "BOTH",
    "lineageDepth": 3,
    "lineageWidth": -1,
    "childrenCount": -1,
    "guidEntityMap": {
        "16b93b78-8683-4f88-9651-24c4a9d797b0": {
            "typeName": "hive_table",
            "attributes": {
                "temporary": false,
                "lastAccessTime": 0,
                "createTime": 0,
                "qualifiedName": "test_lineage.table3",
                "name": "table3",
                "retention": 0
            },
            "lastModifiedTS": "1",
            "guid": "16b93b78-8683-4f88-9651-24c4a9d797b0",
            "status": "ACTIVE",
            "displayText": "table3",
            "classificationNames": [],
            "meaningNames": [],
            "meanings": [],
            "isIncomplete": false,
            "labels": [],
            "isIndexed": true
        },
        "cb22ba23-47a2-4149-ade6-e3d9642fe592": {
            "typeName": "hive_table",
            "attributes": {
                "temporary": false,
                "lastAccessTime": 0,
                "createTime": 0,
                "qualifiedName": "test_lineage.table1",
                "name": "table1",
                "retention": 0
            },
            "lastModifiedTS": "1",
            "guid": "cb22ba23-47a2-4149-ade6-e3d9642fe592",
            "status": "ACTIVE",
            "displayText": "table1",
            "classificationNames": [],
            "meaningNames": [],
            "meanings": [],
            "isIncomplete": false,
            "labels": [],
            "isIndexed": true
        },
        "bbeacce6-5bde-46f7-8fe4-689cbb36ba51": {
            "typeName": "hive_view_query",
            "attributes": {
                "qualifiedName": "test_lineage.HiveQuery1",
                "name": "HiveQuery1",
                "columnMapping": "[{\"DatasetMapping\":{\"Source\":\"test_lineage.table1\",\"Sink\":\"test_lineage.table2\"},\"ColumnMapping\":[{\"Source\":\"column1\",\"Sink\":\"column1\"},{\"Source\":\"column2\",\"Sink\":\"column2\"}]}]"
            },
            "lastModifiedTS": "1",
            "guid": "bbeacce6-5bde-46f7-8fe4-689cbb36ba51",
            "status": "ACTIVE",
            "displayText": "HiveQuery1",
            "classificationNames": [],
            "meaningNames": [],
            "meanings": [],
            "isIncomplete": false,
            "labels": [],
            "isIndexed": true
        },
        "2a12b3ff-5816-4222-833a-035bf82e06e0": {
            "typeName": "hive_table",
            "attributes": {
                "temporary": false,
                "lastAccessTime": 0,
                "createTime": 0,
                "qualifiedName": "test_lineage.table2",
                "name": "table2",
                "retention": 0
            },
            "lastModifiedTS": "1",
            "guid": "2a12b3ff-5816-4222-833a-035bf82e06e0",
            "status": "ACTIVE",
            "displayText": "table2",
            "classificationNames": [],
            "meaningNames": [],
            "meanings": [],
            "isIncomplete": false,
            "labels": [],
            "isIndexed": true
        }
    },
    "includeParent": false,
    "relations": [
        {
            "fromEntityId": "2a12b3ff-5816-4222-833a-035bf82e06e0",
            "toEntityId": "16b93b78-8683-4f88-9651-24c4a9d797b0",
            "relationshipId": "23df8e3e-b066-40b2-be29-9fd90693c51b",
            "columnMapping": "[{\"Source\":\"column1\",\"Sink\":\"column1\"},{\"Source\":\"column2\",\"Sink\":\"column2\"}]"
        },
        {
            "fromEntityId": "bbeacce6-5bde-46f7-8fe4-689cbb36ba51",
            "toEntityId": "2a12b3ff-5816-4222-833a-035bf82e06e0",
            "relationshipId": "5fe8d378-39cd-4c6b-8ced-91b0152d3014"
        },
        {
            "fromEntityId": "cb22ba23-47a2-4149-ade6-e3d9642fe592",
            "toEntityId": "bbeacce6-5bde-46f7-8fe4-689cbb36ba51",
            "relationshipId": "73e084bf-98a3-45fb-a1e4-c56cc40661b8"
        }
    ],
    "parentRelations": [],
    "widthCounts": {
        "INPUT": {
            "cb22ba23-47a2-4149-ade6-e3d9642fe592": 0,
            "bbeacce6-5bde-46f7-8fe4-689cbb36ba51": 1,
            "2a12b3ff-5816-4222-833a-035bf82e06e0": 1
        },
        "OUTPUT": {
            "16b93b78-8683-4f88-9651-24c4a9d797b0": 0,
            "2a12b3ff-5816-4222-833a-035bf82e06e0": 1
        }
    }
}

기타 리소스

형식 정의

모든 자산/엔터티 및 관계는 형식 시스템에 정의됩니다.

모든 형식 정의 API를 호출하여 Microsoft Purview instance 현재 형식 정의를 가져옵니다. 설명된 API 호출에서 사용할 typeName을 잘 모르는 경우 형식 정의 API를 검사 적절한 Asset/Entity 형식을 찾을 수 있습니다.

다음은 이 API의 샘플 응답입니다.

TypeDef API 응답 1.

위의 응답에서 entityDefs에서 자산 형식(예: oracle_table, oracle_view 등)이 정의되어 있음을 알 수 있습니다. 자산의 정의(이 예제에서는 oracle_view)를 자세히 살펴보면 자산이 상속된 DataSet 형식임을 보여 줍니다.

TypeDef API 응답 2.

마찬가지로 다음과 같이 프로세스(예: Oracle_function)가 "프로세스" 형식에서 상속된다는 것을 알 수 있습니다.

TypeDef API 응답 3.

새 사용자 지정 형식 만들기

사용자 지정 자산 또는 프로세스를 만들려면 다음 API를 사용할 수 있습니다.

API: Typedef API 만들기

작업: 사용자 지정 프로세스 형식 만들기

POST {endpoint}/datamap/api/atlas/v2/types/typedefs

본문과 함께:

{
  "enumDefs": [],
  "structDefs": [],
  "classificationDefs": [],
  "entityDefs": [
    {
      "name": "MyCustomServiceProcess",
      "superTypes": [
        "Process"
      ],
      "typeVersion": "1.0",
      "attributeDefs": []
    }
  ],
  "relationshipDefs": []
}

작업: 사용자 지정 데이터 세트 형식 만들기

POST {endpoint}/datamap/api/atlas/v2/types/typedefs

본문과 함께:

{
  "enumDefs": [],
  "structDefs": [],
  "classificationDefs": [],
  "entityDefs": [
    {
      "name": "MyCustomDataSet",
      "superTypes": [
        "DataSet"
      ],
      "typeVersion": "1.0",
      "attributeDefs": []
    }
  ],
  "relationshipDefs": []
}