Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste tutorial, você aprenderá a usar APIs REST do Microsoft Purview para:
- Crie ativos e relações de linhagem entre os ativos de dados.
- Consultar relacionamentos/caminhos de linhagem
APIs referenciadas neste artigo:
Pré-requisitos
O uso dessas APIs requer as funções de Curador de Dados e Leitor de Dados. Confira este tutorial para obter detalhes sobre como obter o token de acesso.
Conceitos
Ativo
No Microsoft Purview, há dois tipos de ativos base: DataSet e Process.
- Os ativos do DataSet que contêm dados como a Tabela SQL do Azure, a Tabela do Oracle etc. devem ser herdados do Conjunto de Dados.
- Processar Ativos que processam dados, como um pipeline de dados, consulta, função etc., devem ser herdados do Processo.
Consulte ativos e tipos para entender as definições de tipo de conjuntos de dados e processos.
Relações e linhagem
No Microsoft Purview, há três tipos de relações para linhagem:
- dataset_process_inputs: conecta o DataSet ao Processo, o que significa que o DataSet é a entrada do Processo
- process_dataset_outputs: conecta o Processo ao Conjunto de Dados, o que significa que o Processo produz o Conjunto de Dados
- direct_lineage_dataset_dataset: conecta DataSet1 a DataSet2, o que significa que DataSet1 é o upstream de DataSet2, embora não saibamos exatamente qual processo está entre eles
Exemplo 1:Aqui está um exemplo de linhagem com 2 conjuntos de dados, um processo e duas relações de linhagem:
Conjunto de Dados ---> dataset_process_inputs ---> Processo ---> process_dataset_outputs ---> Conjunto de Dados
Exemplo 2:Outro exemplo de linhagem com 2 DataSets e uma relação de linhagem:
Conjunto de Dados ---> direct_lineage_dataset_dataset ---> Conjunto de Dados
Criar ativos e relações de linhagem entre os ativos de dados
Nas seções a seguir, vamos usar hive_table como um tipo de exemplo para DataSet e hive_query_process como um tipo de exemplo para Process. Criaremos ativos com esses dois tipos e criaremos linhagens entre eles. Você pode usar qualquer outro tipo, que herda de DataSet ou Process para criar linhagens.
Exemplo 1
Criar ativos via API
Se os ativos para os quais você deseja criar a linhagem ainda não tiverem sido criados no Microsoft Purview, você poderá chamar a API a seguir para criá-los.
Tarefa: Criar dois hive_tables como conjuntos de dados - tabela1 e tabela2, cada um com 2 hive_columns - coluna1 e coluna2.
POST {endpoint}/datamap/api/atlas/v2/entity/bulk
Com o corpo:
{
"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"
}
}
}
]
}
Tarefa: Criar o ativo de processo 'hive_view_query'
POST {endpoint}/datamap/api/atlas/v2/entity/bulk
Com o corpo:
{
"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"
}
]
}
As chamadas de API acima resultam na criação de dois hive_tables(Datasets) e um hive_view_query(Process).
Crie relações de linhagem entre os conjuntos de dados e o processo
API:Criar Relação
Tarefa: Criar linhagem da tabela1 –> HiveQuery1 (ou seja, Conjunto de dados –> Processo)
POST {endpoint}/datamap/api/atlas/v2/relationship
Com o corpo:
{
"typeName": "dataset_process_inputs",
"guid": "-1",
"end1": {
"typeName": "hive_table",
"uniqueAttributes": {
"qualifiedName": "test_lineage.table1"
}
},
"end2": {
"typeName": "Process",
"uniqueAttributes": {
"qualifiedName": "test_lineage.HiveQuery1"
}
}
}
Tarefa: Criar linhagem de HiveQuery1 -> tabela2 (ou seja, Processo -> Conjunto de dados)
POST {endpoint}/datamap/api/atlas/v2/relationship
Com o corpo:
{
"typeName": "process_dataset_outputs",
"guid": "-2",
"end1": {
"typeName": "Process",
"uniqueAttributes": {
"qualifiedName": "test_lineage.HiveQuery1"
}
},
"end2": {
"typeName": "hive_table",
"uniqueAttributes": {
"qualifiedName": "test_lineage.table2"
}
}
}
Exibir linhagem
Depois que os ativos e as relações de linhagem forem criados, você poderá marcar o gráfico de linhagem no Microsoft Purview:
Exemplo 2
Criar uma tabela hive, tabela3, com duas colunas
Tarefa: Criar tabela3, com 2 hive_columns, coluna1 e coluna2
POST {endpoint}/datamap/api/atlas/v2/entity/bulk
Com o corpo:
{
"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"
}
}
}
]
}
Criar linhagem direta entre a tabela 2 e a tabela 3, com mapeamento de coluna
API:Criar Relação
Tarefa: Criar linhagem da tabela2 a> tabela3 (ou seja, Conjunto de dados -> Conjunto de dados) com mapeamento de coluna
POST {endpoint}/datamap/api/atlas/v2/relationship
Com o corpo:
{
"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\"}]"
}
}
Exibir linhagem
Agora, o gráfico de linhagem (junto com o Exemplo 1 & o Exemplo 2 acima) se torna:
Observe que table2 está diretamente vinculado a table3, sem um HiveQuery entre eles.
Consultar relacionamentos/caminhos de linhagem
Tarefa: Obter linhagem da tabela2 via API REST
GET {{endpoint}}/api/atlas/v2/lineage/{{guid_of_table2}}?direction=BOTH
Abaixo, você pode Payload de resposta 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
}
}
}
Outros recursos
Definições de Tipo
Todos os Ativos/Entidades e Relacionamentos são definidos no sistema de tipos.
Chame a API de todas as definições de tipo da lista para obter as definições de tipo atuais em sua instância do Microsoft Purview. Se você não tiver certeza de qual typeName usar nas chamadas de API descritas, poderá marcar a API de definições de tipo para encontrar o tipo de ativo/entidade apropriado.
A seguir está um exemplo de resposta dessa API:
Você pode ver que nos entityDefs na resposta acima, os tipos de ativos (como oracle_table, oracle_view etc.) são definidos. Uma análise adicional da definição do ativo (neste exemplo, oracle_view) mostra que o ativo é do tipo DataSet herdado.
Da mesma forma, você pode descobrir que um processo (por exemplo, Oracle_function) é herdado do tipo "Processo" conforme mostrado:
Criar novos tipos personalizados
Se você quiser criar ativos ou processos personalizados, poderá usar as APIs a seguir.
Tarefa: Criar um tipo de processo personalizado
POST {endpoint}/datamap/api/atlas/v2/types/typedefs
Com o corpo:
{
"enumDefs": [],
"structDefs": [],
"classificationDefs": [],
"entityDefs": [
{
"name": "MyCustomServiceProcess",
"superTypes": [
"Process"
],
"typeVersion": "1.0",
"attributeDefs": []
}
],
"relationshipDefs": []
}
Tarefa: Criar um tipo de conjunto de dados personalizado
POST {endpoint}/datamap/api/atlas/v2/types/typedefs
Com o corpo:
{
"enumDefs": [],
"structDefs": [],
"classificationDefs": [],
"entityDefs": [
{
"name": "MyCustomDataSet",
"superTypes": [
"DataSet"
],
"typeVersion": "1.0",
"attributeDefs": []
}
],
"relationshipDefs": []
}