Tutorial DataHub 4 – API

En esta nueva entrega de la saga de tutoriales acerca de DataHub, vamos a trabajar en la conectividad con la plataforma a través de la API. Como ingenieros de datos, el objetivo es incorporar DataHub como herramienta de Data Governance en nuestro ecosistema. Para ello, en múltiples ocasiones, nos encontraremos con que algunas integraciones más personalizadas hay que hacerlas mediante el uso del stack de develop que ofrece DataHub.

Lo primero que debemos tener es nuestro servicio de DataHub encendido. En el artículo Tutorial DataHub 2 – Quickstart y Despliegue, vimos cómo hacerlo.

DataHub Metadata Service “GMS”

En la primera parte del Tutorial DataHub – Arquitectura, ya avanzamos en qué consistía este componente que definíamos como el corazón de DataHub.

Al hacer el despliegue con Docker Datahub, veremos un servicio llamado «acryldata/datahub-gms:head», que mapea el puerto 8080 «0.0.0.0:8080->8080/tcp, :::8080->8080/tcp». 

El servicio de metadatos de DataHub contiene dos APIs diferentes, la GraphQL y la Rest.li. Vamos a comenzar explorando la primera de ellas, API GraphQL. 

Si nos dirigimos a la URL «http://localhost:9002/api/graphiql», podremos acceder al GraphQL in-browser tool web. Desde esta interfaz, es posible lanzar nuestras queries a la API y ver la documentación acerca de los diferentes esquemas registrados en el framework.

Es importante destacar que esta web funciona con un sistema de cookies que permiten acceder al servicio siempre que nos hayamos logueado previamente en DataHub. De lo contrario, devolverá un error 401.

GraphQL

A la hora de utilizar GraphQL, existen 3 opciones: realizar una Query, Search y Mutation.

Query

Queremos obtener los datos de una entidad conociendo su URN (Uniform Resource Name), que es el esquema que define de forma única cualquier recurso en DataHub. Al utilizar query, estamos obligados a hacer la query por URN, ya que no se puede hacer por otra propiedad.

Previamente, he creado un dominio a través de interfaz web, donde encontraremos su URN correspondiente y que utilizaremos para la query: «urn:li:domain:0e1ca480-3163-4212-9119-c6cd8ebec259».

Observemos cómo se construye la query:

query {
  domain(urn: "urn:li:domain:0e1ca480-3163-4212-9119-c6cd8ebec259") {
    id
    ownership {
      owners {
        type
      }
      lastModified {
        actor
      }
    }
    properties {
      name
    }
  }
}

En primer lugar, tenemos la acción que queremos realizar. En esta ocasión, una query. A continuación, indicamos el esquema que deseamos consultar que, en nuestro caso, será domain.

El esquema se puede consultar dentro de la barra de documentación lateral izquierda, donde también aparecerán los campos que existen en cada uno de los esquemas.

Después, debemos indicar el valor del campo de URN, que es obligatorio. Y, por último, el esquema de datos que queremos consultar. En nuestro caso, está marcado en azul porque esos son los campos internos de la entidad Dominio que queremos obtener en este ejemplo.

Search

El comando search se utiliza cuando no conocemos el URN y queremos encontrar entidades dentro de DataHub.

{
  search (input: {type: DOMAIN, query:"M*",start: 0, count: 10}){
    searchResults{
      entity{
        urn
        type
        ... on Domain {
          properties {
            name
          }
        }
      }
    }
  }
}

En el caso de search, debemos incluir un campo input para realizar la búsqueda. En él, es necesario introducir los filtros que queremos utilizar, por ejemplo, el tipo DOMAIN y todo aquello que empiece por la letra “M”. Dentro de la configuración de petición, GraphQL incluye un sistema de paginado, por lo que preguntamos por los 10 primeros elementos mediante los parámetros start y count.

En el cuerpo de la petición, especificamos los campos que queremos recuperar en la respuesta. En el ejemplo, preguntamos por los campos URN y type (que son comunes a todas las entidades) y, más concretamente, de Domain pedimos la propiedad name.

Mutations

El sistema nos provee de una serie de funciones para crear mediante la API diferentes entidades. Aquí podemos encontrar un listado de todas las Mutations existentes.

mutation createTag {
    createTag(input:
    {
      name: "Deprecated",
      description: "Having this tag means this column or table is deprecated."
    })
}

En este ejemplo, crearemos un tag siguiendo la documentación. Lo más importante que debemos tener en cuenta son los argumentos y los tipos de argumentos donde algunos son opcionales.

Rest.li

Podemos encontrar la documentación de Rest.li en la uri «http://localhost:8080/restli/docs».

Conclusión

En este post hemos visto cómo usar la API de DataHub. Tanto GraphQL como Rest.li, proporcionan a los ingenieros de datos herramientas flexibles y personalizables para gestionar la gobernanza de datos en su ecosistema.

La capacidad de realizar consultas específicas mediante GraphQL, buscar entidades sin conocer su URN y realizar mutaciones para crear o actualizar entidades, permite una integración profunda y personalizada de DataHub en cualquier infraestructura de datos. A través de esta API, se puede aprovechar al máximo el potencial de DataHub como sistema de Data Governance, facilitando un acceso centralizado y seguro a la información organizativa.

Si este artículo te ha parecido interesante, te animamos a visitar la categoría Data Engineering para ver otros posts similares a este y a compartirlo en redes. ¡Hasta pronto!
Óscar García
Óscar García
Artículos: 24