Amostras de consultas SQL

Este documento contém consultas de amostra em entradas de registro armazenadas em buckets de registro atualizados para usar a Análise de registros. Nesses buckets, é possível executar consultas SQL na página Log Analytics no console do Google Cloud. Para mais exemplos, consulte os repositórios do GitHub logging-analytics-samples e security-analytics.

Este documento não descreve o SQL nem como rotear e armazenar entradas de registro. Para informações sobre esses tópicos, consulte a seção Próximas etapas.

Antes de começar

Esta seção descreve as etapas que você precisa concluir antes de usar a Análise de registros.

Configurar buckets de registros

Verifique se os buckets de registro foram atualizados para usar a Análise de registros:

  1. No console do Google Cloud, acesse a página Armazenamento de registros:

    Acessar o armazenamento de registros

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Logging.

  2. Para cada bucket de registros que tenha uma visualização de registro que você quer consultar, verifique se a coluna Log Analytics disponível mostra Aberto. Se a opção Upgrade for exibida, clique em Upgrade e conclua a caixa de diálogo.

Configurar papéis e permissões do IAM

Esta seção descreve os papéis ou as permissões do IAM necessários para usar o Log Analytics:

  • Para receber as permissões necessárias para usar a Análise de registros e as visualizações de registro de consulta, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

    É possível restringir um principal a uma visualização de registro específica adicionando uma condição do IAM à concessão de função de acessador de visualização de registros feita no nível do projeto ou adicionando uma vinculação do IAM ao arquivo de política da visualização de registro. Para mais informações, consulte Controlar o acesso a uma visualização de registro.

    Essas são as mesmas permissões necessárias para visualizar entradas de registro na página Análise de registros. Para informações sobre outros papéis necessários para consultar visualizações em buckets definidos pelo usuário ou para consultar a visualização _AllLogs do bucket de registros _Default, consulte Papéis do Cloud Logging.

Como usar essas consultas

Para usar as consultas mostradas neste documento na página Análise de dados de registros, substitua TABLE_NAME_OF_LOG_VIEW pelo nome da tabela da visualização de registros que você quer consultar.

Para consultar uma visualização de registro, na cláusula FROM, use o seguinte formato:

FROM `PROJECT_ID.LOCATION.BUCKET_ID.VIEW_ID`

O significado dos campos nas expressões anteriores é descrito a seguir:

  • PROJECT_ID: o identificador do projeto.
  • LOCATION: o local da visualização de registro.
  • BUCKET_ID: o nome ou ID do bucket de registros.
  • VIEW_ID: o identificador da visualização de registro.

Se você criou um conjunto de dados vinculado do BigQuery, consulte o conjunto de dados vinculado na página BigQuery Studio. Nessa página, substitua TABLE_NAME_OF_LOG_VIEW pelo caminho para a tabela no conjunto de dados vinculado. Por exemplo, para consultar a visualização _AllLogs no conjunto de dados vinculado mydataset que está no projeto myproject, defina esse campo como myproject.mydataset._AllLogs.

Acesse a página da Análise de registros.

Para abrir a página Análise de registros, faça o seguinte:

  1. No console do Google Cloud, acesse a página Análise de dados de registros:

    Acesse Análise de registros

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Logging.

  2. Opcional: para identificar o esquema da visualização de registro, encontre a visualização na lista Visualizações de registro e selecione o nome dela.

    O esquema é exibido. Você pode usar o campo Filtro para localizar campos específicos. Não é possível modificar o esquema.

Para saber como acessar a consulta padrão de uma visualização de registro, consulte Consultar e analisar registros com a Análise de Registros.

Filtrar registros

As consultas SQL determinam quais entradas na visualização de registro serão processadas, depois agrupam essas entradas e executam operações agregadas. Quando nenhuma operação de agrupamento e agregação é listada, o resultado da consulta inclui as linhas selecionadas pela operação de filtro. Os exemplos nesta seção ilustram a filtragem.

Filtrar por tempo

Para definir o intervalo de tempo da consulta, recomendamos que você use o seletor de intervalo de tempo. Esse seletor é usado automaticamente quando uma consulta não especifica um campo timestamp na cláusula WHERE. Por exemplo, para conferir os dados da semana anterior, selecione Últimos 7 dias no seletor de período. Você também pode usar o seletor de período para especificar um horário de início e término, um horário para visualização e mudar fusos horários.

Se você incluir um campo timestamp na cláusula WHERE, a configuração do seletor de período de tempo não será usada. O exemplo a seguir filtra os dados usando a função TIMESTAMP_SUB, que permite especificar um intervalo de lookback a partir do horário atual:

WHERE
  timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)

Para mais informações sobre como filtrar por tempo, consulte Funções de tempo e Funções de carimbo de data/hora.

Filtrar por recurso

Para filtrar por recurso, adicione uma restrição resource.type.

Por exemplo, a consulta a seguir lê a hora mais recente de dados e, em seguida, retém as linhas cujo tipo de recurso corresponde a gce_instance. Em seguida, ela classifica e exibe até 100 entradas:

SELECT
  timestamp, log_name, severity, json_payload, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  resource.type = "gce_instance"
ORDER BY timestamp ASC
LIMIT 100

Filtrar por gravidade

É possível filtrar por uma gravidade específica com uma restrição como severity = 'ERROR'. Outra opção é usar a instrução IN e especificar um conjunto de valores válidos.

Por exemplo, a consulta a seguir lê a hora mais recente dos dados e retém apenas as linhas que contêm um campo severity cujo valor é 'INFO' ou 'ERROR':

SELECT
  timestamp, log_name, severity, json_payload, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  severity IS NOT NULL AND
  severity IN ('INFO', 'ERROR')
ORDER BY timestamp ASC
LIMIT 100

A consulta anterior filtra pelo valor do campo severity. No entanto, você também pode escrever consultas que filtram pelo valor numérico da gravidade do registro. Por exemplo, se você substituir as linhas severity pelas linhas a seguir, a consulta vai retornar todas as entradas de registro com nível de gravidade pelo menos NOTICE:

  severity_number IS NOT NULL AND
  severity_number > 200

Para informações sobre os valores enumerados, consulte LogSeverity.

Filtrar por nome do registro

Para filtrar por um nome de registro, adicione uma restrição ao valor do campo log_name ou log_id. O campo log_name inclui o caminho do recurso. Ou seja, esse campo tem valores como projects/myproject/logs/mylog. O campo log_id armazena apenas o nome do registro, como mylog.

Por exemplo, a consulta a seguir lê a hora mais recente de dados e, em seguida, retém as linhas em que o valor no campo log_id é cloudaudit.googleapis.com/data_access. Em seguida, ela classifica e exibe os resultados:

SELECT
  timestamp, log_id, severity, json_payload, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  log_id = "cloudaudit.googleapis.com/data_access"
ORDER BY timestamp ASC
LIMIT 100

Filtrar por rótulo de recurso

A maioria dos descritores de recursos monitorados define rótulos que são usados para identificar o recurso específico. Por exemplo, o descritor de uma instância do Compute Engine inclui rótulos para a zona, o ID do projeto e o ID da instância. Quando a entrada de registro é gravada, os valores são atribuídos a cada campo. Confira um exemplo:

{
   type: "gce_instance"
   labels: {
      instance_id: "1234512345123451"
      project_id: "my-project"
      zone: "us-central1-f"
   }
}

Como o tipo de dados do campo labels é JSON, a inclusão de uma restrição como resource.labels.zone = "us-centra1-f" em uma consulta resulta em um erro de sintaxe. Para receber o valor de um campo com um tipo de dados JSON, use a função JSON_VALUE.

Por exemplo, a consulta a seguir lê os dados mais recentes e retém as linhas em que o recurso é uma instância do Compute Engine localizada na zona us-central1-f:

SELECT
  timestamp, log_name, severity, JSON_VALUE(resource.labels.zone) AS zone, json_payload, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  resource.type = "gce_instance" AND
  JSON_VALUE(resource.labels.zone) = "us-central1-f"
ORDER BY timestamp ASC
LIMIT 100

Para informações sobre todas as funções que podem recuperar e transformar dados JSON, consulte Funções JSON.

Filtrar por solicitação HTTP

Para filtrar a visualização de registro e incluir apenas as entradas que correspondem a uma solicitação ou resposta HTTP, adicione uma restrição http_request IS NOT NULL:

SELECT
  timestamp, log_name, severity, http_request, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  http_request IS NOT NULL
ORDER BY timestamp
LIMIT 100

A consulta a seguir inclui apenas linhas que correspondem a solicitações GET ou POST:

SELECT
  timestamp, log_name, severity, http_request, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  http_request IS NOT NULL AND
  http_request.request_method IN ('GET', 'POST')
ORDER BY timestamp ASC
LIMIT 100

Filtrar por status HTTP

Para filtrar por status HTTP, modifique a cláusula WHERE para exigir que o campo http_request.status seja definido:

SELECT
  timestamp, log_name, http_request.status, http_request, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  http_request IS NOT NULL AND
  http_request.status IS NOT NULL
ORDER BY timestamp ASC
LIMIT 100

Para determinar o tipo de dados armazenados em um campo, consulte o esquema ou mostre o campo. Os resultados da consulta anterior mostram que o campo http_request.status armazena valores inteiros.

Filtrar por um campo com um tipo JSON

Para extrair um valor de uma coluna com tipo de dados JSON, use a função JSON_VALUE.

Considere as seguintes consultas:

SELECT
  json_payload
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload.status IS NOT NULL

e

SELECT
  json_payload
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  JSON_VALUE(json_payload.status) IS NOT NULL

As consultas anteriores testam o valor do campo json_payload na entrada de registro. Ambas as consultas descartam entradas de registro que não contêm um campo rotulado como json_payload. A diferença entre essas duas consultas é a linha final, que define o que é testado em relação a NULL. Agora, considere uma visualização de registro que tem duas entradas de registro. Para uma entrada de registro, o campo json_payload tem o seguinte formato:

{
    status: {
        measureTime: "1661517845"
    }
}

Para a outra entrada de registro, o campo json_payload tem uma estrutura diferente:

{
    @type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"
    jobName: "projects/my-project/locations/us-central1/jobs/test1"
    relativeUrl: "/food=cake"
    status: "NOT_FOUND"
    targetType: "APP_ENGINE_HTTP"
}

As duas entradas de registro anteriores atendem à restrição json_payload.status IS NOT NULL. Ou seja, o resultado da primeira consulta inclui as duas entradas de registro. No entanto, quando a restrição é JSON_VALUE(json_payload.status) IS NOT NULL, apenas a segunda entrada de registro é incluída no resultado da consulta.

Filtrar por expressão regular

Para retornar a substring que corresponde a uma expressão regular, use a função REGEXP_EXTRACT. O tipo de retorno dessa função é STRING ou BYTES.

A consulta a seguir mostra as entradas de registro mais recentes recebidas, retém essas entradas com um campo json_payload.jobName e exibe a parte do nome que começa com test:

SELECT
  timestamp, REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload.jobName IS NOT NULL
ORDER BY timestamp DESC
LIMIT 20

Para conferir outros exemplos, consulte a documentação do REGEXP_EXTRACT. Para conferir exemplos de outras expressões regulares que podem ser usadas, consulte Funções, operadores e condicionais.

A consulta mostrada neste exemplo não é eficiente. Para uma correspondência de substring, como a ilustrada, use a função CONTAINS_SUBSTR.

Agrupar e agregar entradas de registro

Esta seção se baseia nos exemplos anteriores e ilustra como agrupar e agregar entradas de registro. Se você não especificar um agrupamento, mas especificar uma agregação, um único resultado será impresso porque o SQL trata todas as linhas que atendem à cláusula WHERE como um único grupo.

Todas as expressões SELECT precisam ser incluídas nos campos de grupo ou agregadas.

Agrupar por tempo

Para agrupar dados por tempo, use a função TIMESTAMP_TRUNC, que trunca um carimbo de data/hora para uma granularidade especificada, como MINUTE. Por exemplo, um carimbo de data/hora de 15:30:11, formatado como hours:minutes:seconds, se torna 15:30:00 quando a granularidade é definida como MINUTE.

A consulta a seguir lê os dados recebidos no intervalo especificado pelo seletor de período e retém as linhas em que o valor do campo json_payload.status não é NULO. A consulta trunca o carimbo de data/hora em cada linha por hora e agrupa as linhas pelo carimbo de data/hora e status truncados:

SELECT
  TIMESTAMP_TRUNC(timestamp, HOUR) AS hour,
  JSON_VALUE(json_payload.status) AS status,
  COUNT(*) AS count
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload IS NOT NULL AND
  JSON_VALUE(json_payload.status) IS NOT NULL
GROUP BY hour,status
ORDER BY hour ASC

Para mais exemplos, consulte a documentação do TIMESTAMP_TRUNC. Para informações sobre outras funções baseadas em tempo, consulte Funções de data/hora.

Agrupar por recurso

A consulta a seguir lê a hora mais recente de dados e agrupa as entradas de registro pelo tipo de recurso. Em seguida, ele conta o número de linhas de cada tipo de recurso e retorna uma tabela com duas colunas. A primeira coluna lista o tipo de recurso, e a segunda é o número de linhas para esse tipo de recurso:

SELECT
   resource.type, COUNT(*) AS count
FROM
  `TABLE_NAME_OF_LOG_VIEW`
GROUP BY resource.type
LIMIT 100

Agrupar por gravidade

A consulta a seguir lê a hora mais recente dos dados e retém as linhas que têm um campo de gravidade. A consulta agrupa as linhas por gravidade e conta o número de linhas de cada grupo:

SELECT
  severity, COUNT(*) AS count
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  severity IS NOT NULL
GROUP BY severity
ORDER BY severity
LIMIT 100

Agrupar por log_id

O resultado da consulta a seguir é uma tabela com duas colunas. A primeira coluna lista os nomes dos registros, e a segunda lista o número de entradas de registro gravadas no registro. A consulta classifica os resultados pela contagem de entradas:

SELECT
  log_id, COUNT(*) AS count
FROM
  `TABLE_NAME_OF_LOG_VIEW`
GROUP BY log_id
ORDER BY count DESC
LIMIT 100

Calcular a latência média da solicitação HTTP

A consulta a seguir ilustra o agrupamento por várias colunas e o cálculo de um valor médio. A consulta agrupa linhas pelo URL contido na solicitação HTTP e pelo valor do campo labels.checker_location. Depois de agrupar as linhas, a consulta calcula a latência média de cada grupo:

SELECT
  JSON_VALUE(labels.checker_location) AS location,
  AVG(http_request.latency.seconds) AS secs, http_request.request_url
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  http_request IS NOT NULL AND
  http_request.request_method IN ('GET')
GROUP BY http_request.request_url, location
ORDER BY location
LIMIT 100

Na expressão anterior, JSON_VALUE é necessário para extrair o valor do campo labels.checker_location, porque o tipo de dados de labels é JSON. No entanto, você não usa essa função para extrair o valor do campo http_request.latency.seconds. O campo "integer" tem um tipo de dados de inteiro.

Calcular a média de bytes enviados para um teste de sub-rede

A consulta a seguir ilustra como mostrar o número médio de bytes enviados por local.

A consulta lê a hora mais recente dos dados e retém apenas as linhas com coluna de tipo de recurso gce_subnetwork e coluna json_payload não nula. Em seguida, a consulta agrupa as linhas pelo local do recurso. Ao contrário do exemplo anterior, em que os dados são armazenados como um valor numérico, o valor do campo bytes_sent é uma string. Portanto, é necessário converter o valor em um FLOAT64 antes de calcular a média:

SELECT JSON_VALUE(resource.labels.location) AS location,
   AVG(CAST(JSON_VALUE(json_payload.bytes_sent) AS FLOAT64)) AS bytes
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  resource.type = "gce_subnetwork" AND
  json_payload IS NOT NULL
GROUP BY location
LIMIT 100

O resultado da consulta anterior é uma tabela em que cada linha lista um local e a média de bytes enviados para esse local.

Para informações sobre todas as funções que podem recuperar e transformar dados JSON, consulte Funções JSON.

Para informações sobre CAST e outras funções de conversão, consulte Funções de conversão.

Contar as entradas de registro com um campo que corresponde a um padrão

Para retornar a substring que corresponde a uma expressão regular, use a função REGEXP_EXTRACT. O tipo de retorno dessa função é STRING ou BYTES.

A consulta a seguir retém as entradas de registro em que o valor do campo json_payload.jobName não é NULL. Em seguida, ele agrupa as entradas pelo sufixo de nome que começa com test. Por fim, a consulta conta o número de entradas em cada grupo:

SELECT
  REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
  COUNT(*) AS count
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload.jobName IS NOT NULL
GROUP BY name
ORDER BY count
LIMIT 20

Para conferir outros exemplos, consulte a documentação do REGEXP_EXTRACT. Para conferir exemplos de outras expressões regulares que podem ser usadas, consulte Funções, operadores e condicionais.

Esta seção descreve duas abordagens diferentes que podem ser usadas para pesquisar várias colunas de uma tabela.

Para pesquisar entradas que correspondem a um conjunto de termos de pesquisa em uma visualização de registro, use a função SEARCH. Essa função exige dois parâmetros: onde pesquisar e a consulta de pesquisa. Como a função SEARCH tem regras específicas sobre como os dados são pesquisados, recomendamos que você leia a documentação da SEARCH.

A consulta a seguir retém apenas as linhas que têm um campo que corresponde exatamente a "35.193.12.15":

SELECT
  timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW` AS t
WHERE
  proto_payload IS NOT NULL AND
  log_id = "cloudaudit.googleapis.com/data_access" AND
  SEARCH(t,"`35.193.12.15`")
ORDER BY timestamp ASC
LIMIT 20

Na consulta anterior, as chaves duplas envolvem o valor a ser pesquisado. Isso garante que a função SEARCH procure uma correspondência exata entre um valor de campo e o valor entre os colchetes.

Quando as chaves são omitidas na string de consulta, ela é dividida com base nas regras definidas na documentação do SEARCH. Por exemplo, quando a instrução a seguir é executada, a string de consulta é dividida em quatro tokens: "35", "193", "12" e "15":

  SEARCH(t,"35.193.12.15")

A instrução SEARCH anterior corresponde a uma linha quando um único campo corresponde aos quatro tokens. A ordem dos tokens não importa.

É possível incluir várias instruções SEARCH em uma consulta. Por exemplo, na consulta anterior, você pode substituir o filtro no ID do registro por uma instrução como esta:

  SEARCH(t,"`cloudaudit.googleapis.com/data_access`")

A instrução anterior pesquisa todos os campos das entradas de registro na visualização de registro, enquanto a instrução original pesquisa apenas o campo log_id das entradas de registro.

Para realizar várias pesquisas em vários campos, separe as strings individuais com um espaço. Por exemplo, a instrução a seguir corresponde a linhas em que um campo contém "Hello World", "happy" e "days":

  SEARCH(t,"`Hello World` happy days")

Por fim, é possível pesquisar campos específicos em vez de uma tabela inteira. Por exemplo, a instrução a seguir pesquisa apenas as colunas text_payload e json_payload:

   SEARCH((text_payload, json_payload) ,"`35.222.132.245`")

Para saber como os parâmetros da função SEARCH são processados, consulte a página de referência do BigQuery Funções de pesquisa.

Para realizar um teste indiferente a maiúsculas e determinar se um valor existe em uma expressão, use a função CONTAINS_SUBSTR. Essa função retorna TRUE quando o valor existe e FALSE, caso contrário. O valor da pesquisa precisa ser um literal STRING, mas não o literal NULL.

Por exemplo, a consulta a seguir busca todas as entradas do registro de auditoria de acesso a dados com um endereço IP específico cujos carimbos de data/hora estão em um intervalo de tempo específico. Por fim, a consulta classifica os resultados e exibe os 20 mais antigos:

SELECT
  timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW` AS t
WHERE
  proto_payload IS NOT NULL AND
  log_id = "cloudaudit.googleapis.com/data_access" AND
  CONTAINS_SUBSTR(t,"35.193.12.15")
ORDER BY timestamp ASC
LIMIT 20

A consulta anterior realiza um teste de substring. Portanto, uma linha que contém "35.193.12.152" corresponde à instrução CONTAINS_SUBSTR.

Combinar dados de várias fontes

As instruções de consulta verificam uma ou mais tabelas ou expressões e retornam as linhas de resultados calculadas. Por exemplo, é possível usar instruções de consulta para mesclar os resultados de instruções SELECT em diferentes tabelas ou conjuntos de dados de várias maneiras e, em seguida, selecionar as colunas dos dados combinados.

Combinar dados de duas tabelas com mesclagens

Para combinar informações de duas tabelas, use um dos operadores de união. O tipo de agrupamento e a cláusula condicional que você usa determinam como as linhas são combinadas e descartadas.

A consulta a seguir mostra os campos json_payload de linhas em duas tabelas diferentes gravadas pelo mesmo período de rastreamento. A consulta executa um JOIN interno em duas tabelas para linhas em que os valores das colunas span_id e trace em ambas as tabelas são iguais. Com base nesse resultado, a consulta seleciona os campos timestamp, severity e json_payload que vieram de TABLE_NAME_OF_LOG_VIEW_1, o campo json_payload de TABLE_NAME_OF_LOG_VIEW_2 e os valores dos campos span_id e trace em que as duas tabelas foram mescladas e retorna até 100 linhas:

SELECT
  a.timestamp, a.severity, a.json_payload, b.json_payload, a.span_id, a.trace
FROM `TABLE_NAME_OF_LOG_VIEW_1` a
JOIN `TABLE_NAME_OF_LOG_VIEW_2` b
ON
  a.span_id = b.span_id AND
  a.trace = b.trace
LIMIT 100

Combinar várias seleções com uniões

Para combinar os resultados de duas ou mais instruções SELECT e descartar linhas duplicadas, use o operador UNION. Para manter linhas duplicadas, use o operador UNION ALL.

A consulta a seguir lê o horário mais recente de dados de TABLE_NAME_OF_LOG_VIEW_1, mescla o resultado com o horário mais recente de dados de TABLE_NAME_OF_LOG_VIEW_2, classifica os dados mesclados por carimbo de data/hora crescente e exibe as 100 entradas mais antigas:

SELECT
  timestamp, log_name, severity, json_payload, resource, labels
FROM(
  SELECT * FROM `TABLE_NAME_OF_LOG_VIEW_1`
  UNION ALL
  SELECT * FROM `TABLE_NAME_OF_LOG_VIEW_2`
)
ORDER BY timestamp ASC
LIMIT 100

Remover entradas de registro duplicadas

O Log Analytics não remove entradas de registro duplicadas antes da execução de uma consulta. Esse comportamento é diferente de quando você consulta entradas de registro usando o Logs Explorer, que remove entradas duplicadas comparando os nomes de registro, carimbos de data/hora e campos de inserção de ID.

Você pode usar a validação no nível da linha para remover entradas de registro duplicadas.

Para mais informações, consulte Solução de problemas: há entradas de registro duplicadas nos resultados do Log Analytics.

Limitações

As consultas usadas na página Análise de registros são compatíveis com funções do GoogleSQL, com algumas exceções.

Os comandos SQL a seguir não são compatíveis com consultas SQL emitidas usando a página Análise de dados de registros:

  • Comandos DDL e DML
  • Funções JavaScript definidas pelo usuário
  • Funções do BigQuery ML
  • Variáveis SQL

O suporte para os itens a seguir é fornecido apenas quando você consulta um conjunto de dados vinculado usando as páginas BigQuery Studio e Looker Studio e a ferramenta de linha de comando bq:

  • Funções JavaScript definidas pelo usuário
  • Funções do BigQuery ML
  • Variáveis SQL

A seguir

Para informações sobre como rotear e armazenar entradas de registro, consulte os seguintes documentos:

Para a documentação de referência do SQL, consulte os seguintes documentos: