Analise o Vertex ML Metadata

Pode usar o Vertex ML Metadata para acompanhar e analisar os metadados produzidos pelos seus sistemas de aprendizagem automática (ML). Ao acompanhar estes metadados, torna-se mais fácil analisar o comportamento do seu sistema de ML. Isto pode ajudar a compreender as alterações no desempenho do seu sistema ou pode ajudar a comparar os artefactos que o seu sistema de ML produziu.

Se está a usar o Vertex ML Metadata pela primeira vez, leia a introdução ao Vertex ML Metadata para saber mais sobre o acompanhamento e a análise dos metadados do seu fluxo de trabalho de ML.

Saiba como consultar os metadados do Vertex ML que quer analisar das seguintes formas:

  • Consultar todos os artefactos, execuções> ou contexto que correspondam aos seus critérios de filtragem.
  • Consultar os artefactos de entrada e saída de uma execução, juntamente com os eventos, usados para associar os artefactos à execução.
  • Consulta para o subgrafo de linhagem de um contexto. Esta consulta devolve os artefactos e as execuções de um contexto, juntamente com os eventos que associam os artefactos às execuções.

Consultar artefactos, execuções e contextos

Pode usar o SDK Vertex AI para Python ou a API REST para consultar registos de artefactos, execuções e contextos através de filtros para criar consultas como as seguintes:

  • Que versões de um modelo preparado atingiram um determinado limite de qualidade?
  • Que conjunto de dados é usado num determinado pipeline?

As secções seguintes demonstram como criar filtros e como consultar artefactos, execuções e contextos.

Vista geral da sintaxe de filtros

As secções seguintes descrevem como usar filtros para consultar artefactos, execuções e contextos.

Campos

Os seguintes campos são suportados quando filtra artefactos, execuções e contextos.

Artefacto Execução Contexto
name
display_name
schema_title
create_time
update_time
metadata
state
uri

O filtro tem de estar entre aspas. Todas as aspas que façam parte do filtro têm de ser escapadas com uma barra invertida.

Operadores de comparação

Pode usar os seguintes operadores de comparação nos seus filtros: =, !=, <, >, >=, <=.

Por exemplo, os seguintes filtros permitem encontrar todos os artefactos em que o nome a apresentar é my_artifact.

REST

display_name=\"my_artifact\"

Python

"display_name=\"my_artifact\""

Para campos de string, pode usar a filtragem com carateres universais com o caráter *.

Para campos de data/hora, como create_time e update_time, tem de formatar a data no formato RFC 3339. Por exemplo:

REST

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

Python

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

Operadores lógicos

Pode usar os operadores lógicos AND e OR para combinar filtros e criar uma consulta complexa.

O exemplo seguinte demonstra como consultar artefactos do tipo ai_platform.model e um campo metadata com um valor numérico superior a 0,9.precision

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"

Filtre metadados com o operador de deslocamento

O campo metadata é uma instância de google.protobuf.Struct cujo formato está definido no esquema especificado no campo schema_title. google.protobuf.Struct é uma estrutura de dados que mapeia chaves para instâncias de google.protobuf.Value. A estrutura de dados google.protobuf.Value armazena valores em campos diferentes consoante o respetivo tipo de dados. Por exemplo:

  • As strings são armazenadas como metadata.FIELD_NAME.string_value,
  • Os números são armazenados como metadata.FIELD_NAME.number_value,
  • Os valores booleanos são armazenados como metadata.FIELD_NAME.bool_value.

Para filtrar por metadata, tem de usar o operador de deslocamento para se deslocar para o campo que quer filtrar. O operador de travessia usa o seguinte formato.

REST

metadata.FIELD_NAME.TYPE_NAME=\"FILTER_VALUE\"

Python

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

Por exemplo, considere uma estrutura de metadados como a seguinte:

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

As consultas seguintes ilustram como usar o operador de deslocamento para filtrar com base neste exemplo de metadados.

  • Filtre os registos que têm metadata.field_1 com um valor inferior a 5.

REST

metadata.field_1.number_value<5

Python

"metadata.field_1.number_value<5"
  • Filtre os registos que têm metadata.field_2 com um valor igual a exemplo.

REST

metadata.field_2.string_value=\"example\"

Python

"metadata.field_2.string_value=\"example\""
  • Filtre os registos que têm metadata.field_5 com um valor igual a verdadeiro.

REST

metadata.field_5.bool_value=true

Python

"metadata.field_5.bool_value=true"

Filtre contextos pelas respetivas relações principais e secundárias

Pode usar o operador has para encontrar contextos que sejam o principal ou o secundário de um contexto especificado.

O operador has usa o seguinte formato:

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

O nome do contexto tem de ser o nome completo do recurso do contexto, como o seguinte: project/PROJECT/locations/LOCATION/metadataStores/METADATA-STORE/contexts/CONTEXT.

Os filtros seguintes demonstram como usar o operador has:

  • Filtre todos os contextos que são filhos do pipeline especificado.

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\""
  • Filtre todos os contextos que são um elemento principal do pipeline especificado.

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\""

Filtre contextos, execuções e artefactos por associação e atribuição

Pode usar a função in_context() para filtrar artefatos ou execuções associados a um contexto. Pode usar a função with_execution() para filtrar artefatos ou contextos específicos associados a uma execução. Da mesma forma, pode usar a função with_artifact() para filtrar execuções ou contextos específicos associados a um artefacto.

As funções de filtro são usadas no seguinte formato.

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

O contexto, a execução e os nomes dos artefactos têm de ser o nome completo do recurso, como o seguinte.

  • 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

O exemplo seguinte demonstra como filtrar objetos que estão no pipeline especificado.

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\")"

Pode usar um caráter universal * nas funções de filtro para filtrar parâmetros de cada recurso. Por exemplo, pode usar o seguinte para filtrar todas as execuções que atuam num tipo de artefacto system.model.

REST

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

Python

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

Seguem-se outros parâmetros suportados nos quais pode aplicar filtros

  • input=true/false: filtre os tipos de artefactos de entrada ou saída.
  • event_time: filtre as horas dos eventos de execuções ou artefactos.
  • Todos os outros campos de filtro suportados

Pode combinar os campos com operandos lógicos para criar consultas de filtros complexas. Tenha em atenção que a profundidade máxima da função aninhada suportada é 5.

Consulte artefactos

Os artefactos, como conjuntos de dados e modelos, representam os dados usados ou produzidos pelo seu fluxo de trabalho de ML. Siga as instruções abaixo para consultar artefactos.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • LOCATION_ID: a sua região.
  • PROJECT_ID: o seu ID do projeto.
  • METADATA_STORE: o ID do armazenamento de metadados onde o artefacto é criado. O repositório de metadados predefinido chama-se default.
  • PAGE_SIZE: (Opcional) O número máximo de artefactos a devolver. Se este valor não for especificado, o serviço devolve um máximo de 100 registos.
  • PAGE_TOKEN: (Opcional) Um token de página de uma chamada MetadataService.ListArtifacts anterior. Especifique este token para obter a página seguinte de resultados.
  • FILTER: especifica as condições necessárias para incluir um artefacto no conjunto de resultados.

Método HTTP e 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 o seu pedido, expanda uma destas opções:

Deverá ver uma saída semelhante à seguinte. ARTIFACT_ID é o ID do registo do 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: . Pode encontrar estes IDs na página de Google Cloud boas-vindas da consola.
  • location: consulte a lista de localizações disponíveis.
  • display_name_filter: filtro a aplicar ao nome a apresentar ao listar os recursos com o formato "display_name=\"my_filter\"" .
  • create_date_filter: filtro a aplicar ao nome create_date ao listar os recursos com o formato "create_time>\"2022-06-11T12:30:00-08:00\"",.

Consulte execuções

As execuções representam um passo no seu fluxo de trabalho de ML, como o pré-processamento de dados ou a formação de um modelo. Use as seguintes instruções para consultar execuções.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • LOCATION_ID: a sua região.
  • PROJECT_ID: .
  • METADATA_STORE: o ID do armazenamento de metadados onde a execução é criada. O repositório de metadados predefinido chama-se default.
  • PAGE_SIZE: (Opcional) O número máximo de artefactos a devolver. Se este valor não for especificado, o serviço devolve um máximo de 100 registos.
  • PAGE_TOKEN: (Opcional) Um token de página de uma chamada MetadataService.ListArtifacts anterior. Especifique este token para obter a página seguinte de resultados.
  • FILTER: especifica as condições necessárias para incluir uma execução no conjunto de resultados.

Método HTTP e 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 o seu pedido, expanda uma destas opções:

Deverá ver uma saída semelhante à seguinte. EXECUTION_ID é o ID do registo de execução.

{
  "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: . Pode encontrar estes IDs na página de Google Cloud boas-vindas da consola.
  • location: consulte a lista de localizações disponíveis.
  • display_name_filter: filtro a aplicar ao nome a apresentar ao listar os recursos com o formato "display_name=\"my_filter\"" .
  • create_date_filter: filtro a aplicar ao nome create_date ao listar os recursos com o formato "create_time>\"2022-06-11T12:30:00-08:00\"",.

Consultar contextos

Os contextos permitem-lhe agrupar conjuntos de execuções, artefactos e outros contextos. Use as seguintes instruções para consultar contextos.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • LOCATION_ID: a sua região.
  • PROJECT_ID: .
  • METADATA_STORE: o ID do armazenamento de metadados onde o contexto é criado. O repositório de metadados predefinido chama-se default.
  • PAGE_SIZE: (Opcional) O número máximo de artefactos a devolver. Se este valor não for especificado, o serviço devolve um máximo de 100 registos.
  • PAGE_TOKEN: (Opcional) Um token de página de uma chamada MetadataService.ListArtifacts anterior. Especifique este token para obter a página seguinte de resultados.
  • FILTER: especifica as condições necessárias para incluir um contexto no conjunto de resultados.

Método HTTP e 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 o seu pedido, expanda uma destas opções:

Deverá ver uma saída semelhante à seguinte. CONTEXT_ID é o ID do registo 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": {}
    }
  ]
}

Consulte os artefactos de entrada e saída de uma execução

Use as instruções seguintes para consultar os artefactos e as execuções no contexto especificado, juntamente com os eventos que associam os artefactos às execuções.

SDK Vertex AI para Python

Artefactos de entrada

Esta amostra do SDK Python envolve a consulta de artefactos de entrada de uma execução.

Python

from google.cloud import aiplatform


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

Artefactos de saída

Esta amostra do SDK Python envolve a consulta de artefactos de saída de uma execução.

Python

from google.cloud import aiplatform


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

REST

Este exemplo de REST inclui a consulta de artefactos de entrada e saída de uma execução.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • LOCATION_ID: a sua região.
  • PROJECT_ID: .
  • METADATA_STORE: o ID do armazenamento de metadados onde a execução é criada. O repositório de metadados predefinido chama-se default.
  • EXECUTION_ID: o ID do registo de execução.

Método HTTP e URL:

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

Para enviar o seu pedido, expanda uma destas opções:

Deverá ver uma saída semelhante à seguinte. EXECUTION_ID é o ID do registo de execução. Se o ID de execução não for especificado, o Vertex ML Metadata criou um identificador exclusivo para esta execução. ARTIFACT_ID é o ID do registo do 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 o subgrafo de linhagem de um contexto

Use as instruções seguintes para consultar os artefactos e as execuções no contexto especificado, juntamente com os eventos que associam os artefactos às execuções.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • LOCATION_ID: a sua região.
  • PROJECT_ID: .
  • METADATA_STORE: o ID do armazenamento de metadados onde a execução é criada. O repositório de metadados predefinido chama-se default.
  • CONTEXT_ID: (Opcional) O ID do registo de contexto.

Método HTTP e URL:

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

Para enviar o seu pedido, expanda uma destas opções:

Deverá ver uma saída semelhante à seguinte. EXECUTION_ID é o ID do registo de execução. Se o ID de execução não for especificado, o Vertex ML Metadata criou um identificador exclusivo para esta execução. ARTIFACT_ID é o ID do registo do 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",
    }
  ]
}

O que se segue?