Usar mesclagens de stream para stream em consultas contínuas

Para solicitar suporte ou enviar feedback sobre esse recurso, envie um e-mail para bq-continuous-queries-feedback@google.com.

As consultas contínuas oferecem suporte a JOIN como uma operação com estado. As operações com estado permitem que as consultas contínuas realizem análises complexas que exigem a retenção de informações em várias linhas ou intervalos de tempo. Esse recurso permite correlacionar eventos de diferentes streams armazenando os dados necessários na memória enquanto a consulta é executada. Para mais informações sobre operações com estado, consulte Operações com estado com suporte.

As mesclagens de stream para stream são uma operação de mesclagem entre duas ou mais tabelas que recebem ingestão de dados orientada ao tempo.

Tipos de JOIN com suporte

As consultas contínuas oferecem suporte aos seguintes tipos de JOIN:

  • JOIN de stream para stream: uma operação de mesclagem entre duas ou mais tabelas que recebem ingestão de dados orientada ao tempo.
  • INNER JOIN.

Tipos de JOIN sem suporte

As consultas contínuas não oferecem suporte aos seguintes tipos de JOIN:

  • JOINs de stream para tabela estática: uma mesclagem em que pelo menos uma tabela unida é estática e não recebe ingestão de dados orientada ao tempo. Um exemplo de tabela estática é uma tabela de dimensões.
  • Outras formas de operações JOIN além de INNER.
  • JOINs que não têm cláusulas JOIN orientadas ao tempo.

Mesclar dados de vários streams

A consulta a seguir mostra como mesclar uma tabela de corridas de táxi a uma tabela de solicitações de táxi e identificar o táxi disponível mais próximo do solicitante em uma janela de tempo de 5 minutos e exportar esses dados para outra tabela do BigQuery:

INSERT INTO
 `real_time_taxi_streaming.matched_rides`
SELECT
 requests.timestamp AS request_time,
 requests.request_id,
 taxis.taxi_id,
 ST_DISTANCE(
   ST_GEOGPOINT(requests.longitude, requests.latitude),
   ST_GEOGPOINT(taxis.longitude, taxis.latitude)
   ) AS distance_in_meters,
 taxis.timestamp AS taxi_available_time
FROM
 APPENDS (TABLE `real_time_taxi_streaming.ride_requests`,
   CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE) AS requests
INNER JOIN
 APPENDS (TABLE `real_time_taxi_streaming.taxirides`,
   CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE) AS taxis
ON
 requests.geohash = taxis.geohash
WHERE
 taxis.ride_status = 'available'
 AND taxis._CHANGE_TIMESTAMP BETWEEN(requests._CHANGE_TIMESTAMP - INTERVAL 5 MINUTE) AND requests._CHANGE_TIMESTAMP
 AND ST_DWITHIN(
   ST_GEOGPOINT(requests.longitude, requests.latitude),
   ST_GEOGPOINT(taxis.longitude, taxis.latitude),
   2000 -- Distance in meters
   );

Considerações sobre a mesclagem

As seções a seguir descrevem as considerações necessárias ao realizar uma mesclagem de stream para stream.

Limitações

  • Somente as operações INNER JOIN são aceitas. Outras formas, como LEFT ou FULL OUTER, não são aceitas.
  • Cada lado da operação INNER JOIN precisa especificar um horário de início para a consulta contínua.
  • Além de uma chave de junção (por exemplo, table1.user_id = table2.user_id), a cláusula JOIN precisa incluir uma condição para restringir a coluna de carimbo de data/hora a um intervalo constante. Essa condição limita o tempo que o sistema espera que um evento correspondente chegue ao outro stream. Por exemplo, é possível especificar que um evento de um stream só pode ser mesclado a um evento de outro se os carimbos de data/hora estiverem dentro de um intervalo de 5 minutos. Não há limite para intervalos simétricos. Por exemplo, é possível usar um intervalo de 5 minutos em um lado da condição de mesclagem e um intervalo de 1 hora no outro.
  • Ao iniciar uma consulta contínua com uma mesclagem de stream para stream, apenas a função APPENDS é aceita. A função CHANGES não é aceita.
  • A coluna de horário do sistema do BigQuery, definida por _CHANGE_TIMESTAMP, é a única coluna de carimbo de data/hora aceita para operações de mesclagem. As colunas definidas pelo usuário não são aceitas.
  • Quando usado em conjunto com agregações em janelas, é necessário seguir todas as limitações documentadas de agregação em janelas .

Considerações de preço

As consultas contínuas do BigQuery são faturadas com base na capacidade de computação (slots) consumida enquanto o job está em execução. Esse modelo baseado em computação também se aplica a operações com estado, como mesclagens. Como as junções exigem que o sistema armazene o "estado" enquanto a consulta está ativa, elas consomem recursos de slot adicionais. Mais contexto ou dados armazenados em uma mesclagem (por exemplo, quando você usa intervalos de tempo mais longos na cláusula JOIN ou WHERE) exigem a preservação de mais estado, o que leva a uma maior utilização de slots.

A seguir