Analizar metadatos de Vertex ML

Puedes usar Vertex ML Metadata para monitorizar y analizar los metadatos que producen tus sistemas de aprendizaje automático. Al monitorizar estos metadatos, resulta más fácil analizar el comportamiento de tu sistema de aprendizaje automático. Esto puede ayudarte a entender los cambios en el rendimiento de tu sistema o a comparar los artefactos que ha producido tu sistema de aprendizaje automático.

Si no conoces Vertex ML Metadata, consulta la introducción a este servicio para obtener más información sobre cómo hacer un seguimiento y analizar los metadatos de tu flujo de trabajo de aprendizaje automático.

Consulta cómo puedes buscar los metadatos de Vertex ML que quieras analizar de las siguientes formas:

  • Consulta de todos los artefactos, ejecuciones> o contextos que coincidan con tus criterios de filtrado.
  • Consulta los artefactos de entrada y salida de una ejecución junto con los eventos, que se usan para conectar los artefactos con la ejecución.
  • Consulta del subgrafo de linaje de un contexto. Esta consulta devuelve los artefactos y las ejecuciones de un contexto, junto con los eventos que conectan los artefactos con las ejecuciones.

Consultar artefactos, ejecuciones y contextos

Puedes usar el SDK de Vertex AI para Python o la API REST para consultar registros de artefactos, ejecuciones y contextos mediante filtros para crear consultas como las siguientes:

  • ¿Qué versiones de un modelo entrenado han alcanzado un determinado umbral de calidad?
  • ¿Qué conjunto de datos se usa en una determinada canalización?

En las siguientes secciones se muestra cómo crear filtros y cómo consultar artefactos, ejecuciones y contextos.

Información general sobre la sintaxis de los filtros

En las siguientes secciones se describe cómo usar filtros para consultar artefactos, ejecuciones y contextos.

Campos

Se admiten los siguientes campos al filtrar artefactos, ejecuciones y contextos.

Artefacto Ejecución Contexto
name
display_name
schema_title
create_time
update_time
metadata
state
uri

El filtro debe ir entre comillas. Las comillas que formen parte de tu filtro deben incluirse con una barra invertida.

Operadores de comparación

Puedes usar los siguientes operadores de comparación en tus filtros: =, !=, <, >, >= y <=.

Por ejemplo, el siguiente filtro busca todos los artefactos cuyo nombre visible sea my_artifact.

REST

display_name=\"my_artifact\"

Python

"display_name=\"my_artifact\""

En los campos de cadena, puede usar el filtro de comodín con el carácter *.

En los campos de marca de tiempo, como create_time y update_time, debe dar formato a la fecha con el formato RFC 3339. Por ejemplo:

REST

create_time=\"2021-05-11T12:30:00-08:00\"

Python

"create_time=\"2021-05-11T12:30:00-08:00\""

Operadores lógicos

Puedes usar los operadores lógicos AND y OR para combinar filtros y crear una consulta compleja.

En el siguiente ejemplo se muestra cómo consultar artefactos de tipo ai_platform.model y un campo metadata precision con un valor numérico superior a 0,9.

REST

schema_title=\"ai_platform.Model\"+AND+metadata.precision.number_value>0.9

Python

"create_time=\"schema_title=\"ai_platform.Model\" AND metadata.precision.number_value>0.9"

Filtrar metadatos con el operador de recorrido

El campo metadata es una instancia de google.protobuf.Struct cuyo formato se define en el esquema especificado en el campo schema_title. google.protobuf.Struct es una estructura de datos que asigna claves a instancias de google.protobuf.Value. La estructura de datos google.protobuf.Value almacena valores en diferentes campos en función de su tipo de datos. Por ejemplo:

  • las cadenas se almacenan como metadata.FIELD_NAME.string_value,
  • los números se almacenan como metadata.FIELD_NAME.number_value,
  • Los valores booleanos se almacenan como metadata.FIELD_NAME.bool_value.

Para filtrar por metadata, debe usar el operador de recorrido para ir al campo por el que quiere filtrar. El operador de recorrido usa el siguiente formato.

REST

metadata.FIELD_NAME.TYPE_NAME=\"FILTER_VALUE\"

Python

"metadata.FIELD_NAME.TYPE_NAME=\"FILTER_VALUE\""

Por ejemplo, considera una estructura de metadatos como la siguiente:

{
   "field_1": 5,
   "field_2": "example",
   "field_3": {
     ...
   },
   "field_4": [],
   "field_5": true,
}

Las siguientes consultas muestran cómo usar el operador de recorrido para filtrar este ejemplo de metadatos.

  • Filtra los registros que tengan metadata.field_1 con un valor inferior a 5.

REST

metadata.field_1.number_value<5

Python

"metadata.field_1.number_value<5"
  • Filtra los registros que tengan metadata.field_2 con un valor igual a ejemplo.

REST

metadata.field_2.string_value=\"example\"

Python

"metadata.field_2.string_value=\"example\""
  • Filtra los registros que tengan metadata.field_5 con un valor igual a true.

REST

metadata.field_5.bool_value=true

Python

"metadata.field_5.bool_value=true"

Filtrar contextos por sus relaciones entre elementos superiores y secundarios

Puedes usar el operador has para buscar contextos que sean el elemento superior o secundario de un contexto especificado.

El operador "has" usa el siguiente formato:

  • "parent_contexts:\"CONTEXT_RESOURCE_NAME\""
  • "child_contexts:\"CONTEXT_RESOURCE_NAME\""

El nombre del contexto debe ser el nombre completo del recurso del contexto, como el siguiente: project/PROJECT/locations/LOCATION/metadataStores/METADATA-STORE/contexts/CONTEXT.

Los siguientes filtros muestran cómo usar el operador "has":

  • Filtra todos los contextos que sean elementos secundarios de la canalización especificada.

REST

parent_contexts:\"project/12345/locations/us-central1/metadataStores/default/contexts/pipeline_1\"

Python

"parent_contexts:\"project/12345/locations/us-central1/metadataStores/default/contexts/pipeline_1\""
  • Filtra todos los contextos que sean elementos superiores de la canalización especificada.

REST

child_contexts:\"project/12345/locations/us-central1/metadataStores/default/contexts/pipeline_1\"

Python

"child_contexts:\"project/12345/locations/us-central1/metadataStores/default/contexts/pipeline_1\""

Filtrar contextos, ejecuciones y artefactos por asociación y atribución

Puedes usar la función in_context() para filtrar artefactos o ejecuciones que estén asociados a un contexto. Puedes usar la función with_execution() para filtrar artefactos o contextos específicos asociados a una ejecución. Del mismo modo, puedes usar la función with_artifact() para filtrar ejecuciones o contextos específicos asociados a un artefacto.

Las funciones de filtro se usan con el siguiente formato.

  • "in_context(\"CONTEXT_RESOURCE_NAME\")"
  • "with_execution(\"EXECUTION_RESOURCE_NAME\")"
  • "with_artifact(\"ARTIFACT_RESOURCE_NAME\")"

El contexto, la ejecución y los nombres de los artefactos deben ser el nombre completo del recurso, como se indica a continuación.

  • project/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA-STORE/contexts/CONTEXT
  • project/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA-STORE/executions/EXECUTION
  • project/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA-STORE/artifacts/ARTIFACT

En el siguiente ejemplo se muestra cómo filtrar objetos que se encuentran en la canalización especificada.

REST

in_context(\"project/12345/locations/us-central1/metadataStores/default/contexts/pipeline_1\")

Python

"in_context(\"project/12345/locations/us-central1/metadataStores/default/contexts/pipeline_1\")"

Puede usar un comodín * en las funciones de filtro para filtrar parámetros de cada recurso. Por ejemplo, puedes usar lo siguiente para filtrar todas las ejecuciones que actúan sobre un tipo de artefacto system.model.

REST

with_artifact(\"*\",\"schema_title='name.model'\")

Python

"with_artifact(\"*\",\"schema_title='name.model'\")"

Estos son otros parámetros admitidos por los que puede filtrar:

  • input=true/false: filtra los tipos de artefactos de entrada o salida.
  • event_time: filtra las horas de los eventos de ejecuciones o artefactos.
  • Todos los demás campos de filtro admitidos

Puedes combinar los campos con operandos lógicos para crear consultas de filtro complejas. Ten en cuenta que la profundidad máxima admitida de funciones anidadas es 5.

Consultar artefactos

Los artefactos, como los conjuntos de datos y los modelos, representan los datos que utiliza o produce tu flujo de trabajo de aprendizaje automático. Sigue estas instrucciones para consultar artefactos.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION_ID: tu región.
  • PROJECT_ID: tu ID de proyecto.
  • METADATA_STORE: ID del almacén de metadatos en el que se crea el artefacto. El almacén de metadatos predeterminado se llama default.
  • PAGE_SIZE: (opcional) Número máximo de artefactos que se devolverán. Si no se especifica este valor, el servicio devuelve un máximo de 100 registros.
  • PAGE_TOKEN: (Opcional) Un token de página de una llamada anterior a MetadataService.ListArtifacts. Especifica este token para obtener la siguiente página de resultados.
  • FILTER: especifica las condiciones necesarias para incluir un artefacto en el conjunto de resultados.

Método HTTP y URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/artifacts?pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN&filter=FILTER

Para enviar tu solicitud, despliega una de estas opciones:

Debería ver un resultado similar al siguiente. ARTIFACT_ID es el ID del registro del artefacto.

{
  "artifacts": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/default/artifacts/ARTIFACT_ID",
      "displayName": "Example artifact",
      "uri": "gs://your_bucket_name/artifacts/dataset.csv",
      "etag": "67891011",
      "createTime": "2021-05-18T00:33:13.833Z",
      "updateTime": "2021-05-18T00:33:13.833Z",
      "state": "LIVE",
      "schemaTitle": "system.Dataset",
      "schemaVersion": "0.0.1",
      "metadata": {
        "payload_format": "CSV"
      },
      "description": "Description of the example artifact."
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "displayName": "Another example artifact",
      "uri": "gs://your_bucket_name/artifacts/dataset-2.csv",
      "etag": "67891012",
      "createTime": "2021-05-18T00:29:24.344Z",
      "updateTime": "2021-05-18T00:29:24.344Z",
      "state": "LIVE",
      "schemaTitle": "system.Dataset",
      "schemaVersion": "0.0.1",
      "metadata": {
        "payload_format": "CSV"
      },
      "description": "Description of the other example artifact."
    }
  ]
}

Python

Python

from typing import Optional

from google.cloud import aiplatform


def list_artifact_sample(
    project: str,
    location: str,
    display_name_filter: Optional[str] = "display_name=\"my_model_*\"",
    create_date_filter: Optional[str] = "create_time>\"2022-06-11\"",
    order_by: Optional[str] = None,
):
    aiplatform.init(project=project, location=location)

    combined_filters = f"{display_name_filter} AND {create_date_filter}"
    return aiplatform.Artifact.list(
        filter=combined_filters,
        order_by=order_by,
    )

  • project: . Puedes encontrar estos IDs en la página de bienvenida de la Google Cloud consola.
  • location: consulta la lista de ubicaciones disponibles.
  • display_name_filter: filtro que se aplicará al nombre visible al enumerar los recursos con el formato "display_name=\"mi_filtro\"" .
  • create_date_filter: filtro que se aplicará al nombre de create_date al enumerar los recursos con el formato "create_time>\"2022-06-11T12:30:00-08:00\"",.

Consultar ejecuciones

Las ejecuciones representan un paso de tu flujo de trabajo de aprendizaje automático, como el preprocesamiento de datos o el entrenamiento de un modelo. Sigue estas instrucciones para consultar las ejecuciones.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION_ID: tu región.
  • PROJECT_ID: .
  • METADATA_STORE: ID del almacén de metadatos en el que se crea la ejecución. El almacén de metadatos predeterminado se llama default.
  • PAGE_SIZE: (opcional) Número máximo de artefactos que se devolverán. Si no se especifica este valor, el servicio devuelve un máximo de 100 registros.
  • PAGE_TOKEN: (Opcional) Un token de página de una llamada anterior a MetadataService.ListArtifacts. Especifica este token para obtener la siguiente página de resultados.
  • FILTER: especifica las condiciones necesarias para incluir una ejecución en el conjunto de resultados.

Método HTTP y URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/executions?pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN&filter=FILTER

Para enviar tu solicitud, despliega una de estas opciones:

Debería ver un resultado similar al siguiente. EXECUTION_ID es el ID del registro de ejecución.

{
  "executions": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/executions/EXECUTION_ID",
      "displayName": "Example execution 1",
      "etag": "67891011",
      "createTime": "2021-05-18T00:06:56.177Z",
      "updateTime": "2021-05-18T00:06:56.177Z",
      "schemaTitle": "system.Run",
      "schemaVersion": "0.0.1",
      "metadata": {},
      "description": "Description of the example execution."
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/executions/EXECUTION_ID",
      "displayName": "Example execution 2",
      "etag": "67891011",
      "createTime": "2021-05-18T00:04:49.659Z",
      "updateTime": "2021-05-18T00:04:49.659Z",
      "schemaTitle": "system.Run",
      "schemaVersion": "0.0.1",
      "metadata": {},
      "description": "Description of the example execution."
    }
  ]
}

Python

Python

from typing import Optional

from google.cloud import aiplatform


def list_execution_sample(
    project: str,
    location: str,
    display_name_filter: Optional[str] = "display_name=\"my_execution_*\"",
    create_date_filter:  Optional[str] = "create_time>\"2022-06-11T12:30:00-08:00\"",
):
    aiplatform.init(
        project=project,
        location=location)

    combined_filters = f"{display_name_filter} AND {create_date_filter}"

    return aiplatform.Execution.list(filter=combined_filters)

  • project: . Puedes encontrar estos IDs en la página de bienvenida de la Google Cloud consola.
  • location: consulta la lista de ubicaciones disponibles.
  • display_name_filter: filtro que se aplicará al nombre visible al enumerar los recursos con el formato "display_name=\"mi_filtro\"" .
  • create_date_filter: filtro que se aplicará al nombre de create_date al enumerar los recursos con el formato "create_time>\"2022-06-11T12:30:00-08:00\"",.

Consultar contextos

Los contextos te permiten agrupar conjuntos de ejecuciones, artefactos y otros contextos. Sigue estas instrucciones para consultar contextos.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION_ID: tu región.
  • PROJECT_ID: .
  • METADATA_STORE: ID del almacén de metadatos en el que se crea el contexto. El almacén de metadatos predeterminado se llama default.
  • PAGE_SIZE: (opcional) Número máximo de artefactos que se devolverán. Si no se especifica este valor, el servicio devuelve un máximo de 100 registros.
  • PAGE_TOKEN: (Opcional) Un token de página de una llamada anterior a MetadataService.ListArtifacts. Especifica este token para obtener la siguiente página de resultados.
  • FILTER: especifica las condiciones necesarias para incluir un contexto en el conjunto de resultados.

Método HTTP y URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/contexts?pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN&filter=FILTER

Para enviar tu solicitud, despliega una de estas opciones:

Debería ver un resultado similar al siguiente. CONTEXT_ID es el ID del registro de contexto.

{
  "contexts": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/contexts/CONTEXT_ID",
      "displayName": "Experiment 1",
      "etag": "67891011",
      "createTime": "2021-05-18T22:36:02.153Z",
      "updateTime": "2021-05-18T22:36:02.153Z",
      "parentContexts": [],
      "schemaTitle": "system.Experiment",
      "schemaVersion": "0.0.1",
      "metadata": {}
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/contexts/CONTEXT_ID",
      "displayName": "Pipeline run 1",
      "etag": "67891011",
      "createTime": "2021-05-18T22:35:02.600Z",
      "updateTime": "2021-05-18T22:35:02.600Z",
      "parentContexts": [],
      "schemaTitle": "system.PipelineRun",
      "schemaVersion": "0.0.1",
      "metadata": {}
    }
  ]
}

Consulta de los artefactos de entrada y salida de una ejecución

Sigue estas instrucciones para consultar los artefactos y las ejecuciones del contexto especificado, así como los eventos que conectan los artefactos con las ejecuciones.

SDK de Vertex AI para Python

Artefactos de entrada

Este ejemplo del SDK de Python implica consultar los artefactos de entrada de una ejecución.

Python

from google.cloud import aiplatform


def get_execution_input_artifacts_sample(
    execution: aiplatform.Execution
):
    return execution.get_input_artifacts()

Artefactos de salida

Este ejemplo del SDK de Python implica consultar los artefactos de salida de una ejecución.

Python

from google.cloud import aiplatform


def get_execution_output_artifacts_sample(
    execution: aiplatform.Execution
):
    return execution.get_output_artifacts()

REST

Este ejemplo de REST incluye consultas de los artefactos de entrada y salida de una ejecución.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION_ID: tu región.
  • PROJECT_ID: .
  • METADATA_STORE: ID del almacén de metadatos en el que se crea la ejecución. El almacén de metadatos predeterminado se llama default.
  • EXECUTION_ID: ID del registro de ejecución.

Método HTTP y URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/executions/EXECUTION_ID:queryExecutionInputsAndOutputs

Para enviar tu solicitud, despliega una de estas opciones:

Debería ver un resultado similar al siguiente. EXECUTION_ID es el ID del registro de ejecución. Si no se especifica el ID de ejecución, Vertex ML Metadata crea un identificador único para esta ejecución. ARTIFACT_ID es el ID del registro del artefacto.

{
  "artifacts": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "displayName": "Example artifact",
      "uri": "gs://your_bucket_name/artifacts/dataset.csv",
      "etag": "678901011",
      "createTime": "2021-05-18T00:29:24.344Z",
      "updateTime": "2021-05-18T00:29:24.344Z",
      "state": "LIVE",
      "schemaTitle": "system.Dataset",
      "schemaVersion": "0.0.1",
      "metadata": {
        "payload_format": "CSV"
      },
      "description": "Description of the example artifact."
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "displayName": "Example artifact 2",
      "uri": "gs://your_bucket_name/artifacts/dataset.csv",
      "etag": "678901011",
      "createTime": "2021-05-18T00:33:13.833Z",
      "updateTime": "2021-05-18T00:33:13.833Z",
      "state": "LIVE",
      "schemaTitle": "system.Dataset",
      "schemaVersion": "0.0.1",
      "metadata": {
        "payload_format": "CSV"
      },
      "description": "Description of the example artifact."
    }
  ],
  "executions": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/executions/EXECUTION_ID",
      "displayName": "Example execution 1",
      "etag": "678901011",
      "createTime": "2021-05-18T00:04:49.659Z",
      "updateTime": "2021-05-18T00:04:49.659Z",
      "schemaTitle": "system.Run",
      "schemaVersion": "0.0.1",
      "metadata": {},
      "description": "Description of the example execution."
    }
  ],
  "events": [
    {
      "artifact": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "execution": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/executions/EXECUTION_ID",
      "eventTime": "2021-05-18T00:04:49.659Z",,
      "type": "INPUT",
    },
    {
      "artifact": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "execution": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/executions/EXECUTION_ID",
      "eventTime": "2021-05-18T00:04:49.659Z",,
      "type": "OUTPUT",
    }
  ]
}

Consultar el subgrafo de linaje de un contexto

Sigue estas instrucciones para consultar los artefactos y las ejecuciones del contexto especificado, así como los eventos que conectan los artefactos con las ejecuciones.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION_ID: tu región.
  • PROJECT_ID: .
  • METADATA_STORE: ID del almacén de metadatos en el que se crea la ejecución. El almacén de metadatos predeterminado se llama default.
  • CONTEXT_ID: (Opcional) El ID del registro de contexto.

Método HTTP y URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/contexts/CONTEXT_ID:queryContextLineageSubgraph

Para enviar tu solicitud, despliega una de estas opciones:

Debería ver un resultado similar al siguiente. EXECUTION_ID es el ID del registro de ejecución. Si no se especifica el ID de ejecución, Vertex ML Metadata crea un identificador único para esta ejecución. ARTIFACT_ID es el ID del registro del artefacto.

{
  "artifacts": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "displayName": "Example artifact",
      "uri": "gs://your_bucket_name/artifacts/dataset.csv",
      "etag": "678901011",
      "createTime": "2021-05-18T00:29:24.344Z",
      "updateTime": "2021-05-18T00:29:24.344Z",
      "state": "LIVE",
      "schemaTitle": "system.Dataset",
      "schemaVersion": "0.0.1",
      "metadata": {
        "payload_format": "CSV"
      },
      "description": "Description of the example artifact."
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "displayName": "Example artifact 2",
      "uri": "gs://your_bucket_name/artifacts/dataset.csv",
      "etag": "678901011",
      "createTime": "2021-05-18T00:33:13.833Z",
      "updateTime": "2021-05-18T00:33:13.833Z",
      "state": "LIVE",
      "schemaTitle": "system.Dataset",
      "schemaVersion": "0.0.1",
      "metadata": {
        "payload_format": "CSV"
      },
      "description": "Description of the example artifact."
    }
  ],
  "executions": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/executions/EXECUTION_ID",
      "displayName": "Example execution 1",
      "etag": "678901011",
      "createTime": "2021-05-18T00:04:49.659Z",
      "updateTime": "2021-05-18T00:04:49.659Z",
      "schemaTitle": "system.Run",
      "schemaVersion": "0.0.1",
      "metadata": {},
      "description": "Description of the example execution."
    }
  ],
  "events": [
    {
      "artifact": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "execution": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/executions/EXECUTION_ID",
      "eventTime": "2021-05-18T00:04:49.659Z",,
      "type": "INPUT",
    },
    {
      "artifact": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "execution": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/executions/EXECUTION_ID",
      "eventTime": "2021-05-18T00:04:49.659Z",,
      "type": "OUTPUT",
    }
  ]
}

Siguientes pasos