Analisar Vertex ML Metadata

É possível usar o Vertex ML Metadata para rastrear e analisar os metadados produzidos pelos sistemas de machine learning (ML). Ao acompanhar esses metadados, fica mais fácil analisar o comportamento do seu sistema de ML. Isso pode ajudar a entender as mudanças no desempenho do sistema ou a comparar os artefatos produzidos pelo sistema de ML.

Se você está começando a usar o Vertex ML Metadata, leia a introdução sobre o Vertex ML Metadata para saber mais sobre como rastrear e analisar os metadados do fluxo de trabalho de ML.

Saiba como consultar os metadados de Vertex ML que você quer analisar das seguintes maneiras:

  • Consulte todos os artefatos, execuções ou contextos que correspondem aos critérios de filtragem.
  • Consulte os artefatos de entrada e saída de uma execução junto com os eventos usados para conectar os artefatos à execução.
  • Consulte o subgráfico de linhagem de um contexto. Essa consulta retorna artefatos e execuções de um contexto, além dos eventos que conectam artefatos às execuções.

Consultar artefatos, execuções e contextos

É possível usar o SDK Vertex AI para Python ou a API REST para consultar artefatos, execuções e registros de contextos usando filtros para criar consultas como as seguintes:

  • Quais versões de um modelo treinado atingiram um determinado limite de qualidade?
  • Qual conjunto de dados é usado em um determinado pipeline?

As seções a seguir demonstram comocriar filtros e como consultarartefatos .Execuções econtextos.

Visão geral da sintaxe de filtros

As seções a seguir descrevem como usar filtros para consultar artefatos, execuções e contextos.

Campos

Os campos a seguir são compatíveis com a filtragem de artefatos, execuções e contextos.

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

Seu filtro precisa ser colocado entre aspas, e todas as aspas que fazem parte do filtro precisam ser escapadas com uma barra invertida.

Operadores de comparação

É possível usar os seguintes operadores de comparação nos filtros: =, !=, <, >, >=, <=.

Por exemplo, os filtros a seguir para encontrar todos os artefatos em que o nome de exibição é my_artifact.

REST

display_name=\"my_artifact\"

Python

"display_name=\"my_artifact\""

Para campos de string, é possível usar a filtragem de caracteres curinga com o caractere *.

Para campos de carimbo de data/hora, como create_time e update_time, formate a data usando o 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

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

O exemplo a seguir demonstra como consultar artefatos do tipo ai_platform.model e um campo metadata precision com um valor numérico maior que 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 por metadados usando o operador de travessia

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

  • strings são armazenadas como metadata.FIELD_NAME.string_value;
  • números são armazenados como metadata.FIELD_NAME.number_value;
  • booleanos são armazenados como metadata.FIELD_NAME.bool_value.

Para filtrar por metadata, use o operador de passagem para percorrer o campo que você quer filtrar. O operador de travessia usa o formato a seguir.

REST

metadata.FIELD_NAME.TYPE_NAME=\"FILTER_VALUE\"

Python

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

Por exemplo, considere uma estrutura de metadados como esta:

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

As consultas a seguir ilustram como usar o operador de travessia para filtrar esses metadados de exemplo.

  • Filtre os registros que tenham metadata.field_1 com um valor menor que 5.

REST

metadata.field_1.number_value<5

Python

"metadata.field_1.number_value<5"
  • Filtre por registros que tenham metadata.field_2 com um valor igual ao example.

REST

metadata.field_2.string_value=\"example\"

Python

"metadata.field_2.string_value=\"example\""
  • Filtre por registros que tenham metadata.field_5 com um valor igual a true.

REST

metadata.field_5.bool_value=true

Python

"metadata.field_5.bool_value=true"

Filtrar contextos pelos relacionamentos pai e filho

Você pode usar o operador has para encontrar contextos que sejam pai ou filho 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 precisa ser o nome completo do recurso do contexto, como: project/PROJECT/locations/LOCATION/metadataStores/METADATA-STORE/contexts/CONTEXT.

Os filtros a seguir demonstram como usar o operador "contém":

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

Filtrar contextos, execuções e artefatos por associação e atribuição

Use a função in_context() para filtrar artefatos ou execuções que estão associados a um contexto. É possível usar a função with_execution() para filtrar artefatos ou contextos específicos associados a uma execução. Da mesma forma, é possível usar a função with_artifact() para filtrar execuções ou contextos específicos associados a um artefato.

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 do artefato precisam 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 a seguir 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\")"

Você pode usar um caractere curinga * nas funções de filtro para refinar os parâmetros de cada recurso. Por exemplo, é possível usar o filtro a seguir para filtrar todas as execuções que funcionam em um tipo de artefato system.model.

REST

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

Python

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

Veja outros parâmetros compatíveis que podem ser filtrados:

  • input=true/false: filtra tipos de artefatos de entrada ou saída.
  • event_time: filtra os tempos dos eventos de execuções ou artefatos.
  • Todos os outros campos de filtro compatíveis

É possível combinar os campos com Operandos lógicos para criar consultas de filtro complexas. A profundidade máxima permitida da função aninhada é 5.

Consultar artefatos

Os artefatos, como conjuntos de dados e modelos, representam dados usados ou produzidos pelo fluxo de trabalho de ML. Use as instruções a seguir para consultar artefatos.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: sua região.
  • PROJECT_ID: o ID do projeto.
  • METADATA_STORE: o ID do armazenamento de metadados em que o artefato é criado. O armazenamento de metadados padrão é chamado de default.
  • PAGE_SIZE: (opcional) o número máximo de artefatos a serem retornados. Se esse valor não for especificado, o serviço retornará no máximo 100 registros.
  • PAGE_TOKEN: (opcional) um token de página de uma chamada anterior MetadataService.ListArtifacts. Especifique esse token para ver a próxima página de resultados.
  • FILTER: especifica as condições necessárias para incluir um artefato 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 a solicitação, expanda uma destas opções:

Será exibido um código semelhante a este. ARTIFACT_ID é o ID do registro de artefato.

{
  "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: o ID do projeto. Esses IDs estão na página de boas-vindas do console do Google Cloud.
  • location: Consulte a Lista de locais disponíveis.
  • display_name_filter: filtro a ser aplicado no nome de exibição, listando os recursos com o formato "display_name=\"my_filter\"".
  • create_date_filter: filtro a ser aplicado no nome create_date, listando os recursos com o formato "create_time>\"2022-06-11T12:30:00-08:00\"",.

Consultar execuções

As execuções representam uma etapa no fluxo de trabalho de ML, como o pré-processamento de dados ou o treinamento de um modelo. Use as instruções a seguir para consultar execuções.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: sua região.
  • PROJECT_ID: o ID do projeto.
  • METADATA_STORE: o ID do repositório de metadados em que a execução é criada. O armazenamento de metadados padrão é chamado de default.
  • PAGE_SIZE: (opcional) o número máximo de artefatos a serem retornados. Se esse valor não for especificado, o serviço retornará no máximo 100 registros.
  • PAGE_TOKEN: (opcional) um token de página de uma chamada anterior MetadataService.ListArtifacts. Especifique esse token para ver a próxima página 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 a solicitação, expanda uma destas opções:

Será exibido um código semelhante a este. EXECUTION_ID é o ID do registro 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: o ID do projeto. Esses IDs estão na página de boas-vindas do console do Google Cloud.
  • location: Consulte a Lista de locais disponíveis.
  • display_name_filter: filtro a ser aplicado no nome de exibição, listando os recursos com o formato "display_name=\"my_filter\"".
  • create_date_filter: filtro a ser aplicado no nome create_date, listando os recursos com o formato "create_time>\"2022-06-11T12:30:00-08:00\"",.

Consultar contextos

Os contextos permitem agrupar conjuntos de execuções, artefatos e outros contextos. Use as instruções a seguir para consultar contextos.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: sua região.
  • PROJECT_ID: o ID do projeto.
  • METADATA_STORE: o ID do armazenamento de metadados em que o contexto é criado. O armazenamento de metadados padrão é chamado de default.
  • PAGE_SIZE: (opcional) o número máximo de artefatos a serem retornados. Se esse valor não for especificado, o serviço retornará no máximo 100 registros.
  • PAGE_TOKEN: (opcional) um token de página de uma chamada anterior MetadataService.ListArtifacts. Especifique esse token para ver a próxima página 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 a solicitação, expanda uma destas opções:

Será exibido um código semelhante a este. CONTEXT_ID é o ID do 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": {}
    }
  ]
}

Consultar artefatos de entrada e saída de uma execução

Use as instruções a seguir para consultar os artefatos e execuções no contexto especificado, além dos eventos que conectam artefatos às execuções.

SDK da Vertex AI para Python

Artefatos de entrada

Esta amostra de SDK do Python envolve a consulta de artefatos 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()

Artefatos de saída

Esta amostra de SDK do Python envolve a consulta de artefatos 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

Esta amostra REST inclui a consulta de artefatos de entrada e saída de uma execução.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: sua região.
  • PROJECT_ID: o ID do projeto.
  • METADATA_STORE: o ID do repositório de metadados em que a execução é criada. O armazenamento de metadados padrão é chamado de default.
  • EXECUTION_ID: o ID do registro 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 a solicitação, expanda uma destas opções:

Será exibido um código semelhante a este. EXECUTION_ID é o ID do registro de execução. Se o ID de execução não for especificado, o Vertex ML Metadata criou um identificador exclusivo para essa execução. ARTIFACT_ID é o ID do registro de artefato.

{
  "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 subgráfico de linhagem de um contexto

Use as instruções a seguir para consultar os artefatos e execuções no contexto especificado, além dos eventos que conectam artefatos às execuções.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: sua região.
  • PROJECT_ID: o ID do projeto.
  • METADATA_STORE: o ID do repositório de metadados em que a execução é criada. O armazenamento de metadados padrão é chamado de default.
  • CONTEXT_ID (opcional): o ID do registro 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 a solicitação, expanda uma destas opções:

Será exibido um código semelhante a este. EXECUTION_ID é o ID do registro de execução. Se o ID de execução não for especificado, o Vertex ML Metadata criou um identificador exclusivo para essa execução. ARTIFACT_ID é o ID do registro de artefato.

{
  "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",
    }
  ]
}

A seguir