Usar junções de stream para stream em consultas contínuas
No BigQuery, é possível usar mesclagens de stream para stream em consultas contínuas para analisar e correlacionar dados de dois ou mais streams de dados em tempo real. 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 por tempo.
Os casos de uso comuns para mesclagens de stream para stream incluem detecção de fraudes financeiras, criação de perfis de clientes e otimização do gerenciamento da cadeia de suprimentos. Essas junções são um tipo importante de operação com estado. Para mais informações sobre operações com estado, consulte Operações com estado compatíveis.
Tipos de JOIN compatíveis
Os seguintes tipos de JOIN são compatíveis com consultas contínuas:
- JOIN de stream para stream: uma operação de mesclagem entre duas ou mais tabelas que recebem ingestão de dados orientada por tempo.
- INNER JOIN.
Tipos de JOIN não aceitos
Os seguintes tipos de JOIN não são compatíveis com consultas contínuas:
- JOINs de stream para tabela estática: uma mesclagem em que pelo menos uma tabela mesclada é uma tabela estática que não recebe ingestão de dados orientada por 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 por tempo.
Unir dados de vários streams
A consulta a seguir mostra como mesclar uma tabela de corridas de táxi com uma tabela de solicitações de táxi, identificar o táxi disponível mais próximo do solicitante em um período 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 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 JOINsão compatíveis. Outras formas, comoLEFTouFULL OUTER, não são compatíveis. - Cada lado da operação
INNER JOINprecisa especificar um horário de início para a consulta contínua. - Além de uma chave de mesclagem (por exemplo,
table1.user_id = table2.user_id), a cláusulaJOINprecisa 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 para que um evento correspondente chegue no outro stream. Por exemplo, é possível especificar que um evento de um stream só pode ser mesclado com um evento de outro se os carimbos de data/hora estiverem em um intervalo de 5 minutos. Você não se limita a 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çãoCHANGESnão é compatível. - A coluna de horário do sistema do BigQuery, definida por
_CHANGE_TIMESTAMP, é a única coluna de carimbo de data/hora compatível com operações de mesclagem. Não é possível usar colunas definidas pelo usuário. - Quando usado em conjunto com agregações em janela, é necessário seguir todas as limitações documentadas de agregação em janela.
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 mesclagens exigem que o sistema
armazene o "estado" enquanto a consulta está ativa, elas consomem mais recursos
de slot. 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
- Saiba mais sobre as consultas contínuas do BigQuery.
- Saiba como usar a agregação de janela.
- Saiba como realizar JOINs, agregações e janelas.