União de dados de série temporal

Você pode usar o construtor ASOF JOIN para unir tabelas que contêm dados de série temporal. ASOF JOIN está disponível como sintaxe padrão na cláusula FROM de uma instrução SELECT. Embora consultas ASOF JOIN possam ser emuladas através do uso de SQL complexo, outros tipos de junções e funções de janela, essas consultas são mais fáceis de escrever (e otimizadas) se você usar a sintaxe ASOF JOIN.

Introdução

Você pode usar junções ASOF para analisar dados de série temporal, como dados de negociação financeira. A análise dos custos de transação, por exemplo, requer cálculos de “slippage”, que medem a diferença entre o preço cotado no momento da decisão de comprar ações e o preço efetivamente pago quando a negociação foi executada e registrada. O ASOF JOIN pode agilizar esse tipo de análise. Dado que a principal capacidade deste método de junção é a análise de uma série temporal em relação a outra, ASOF JOIN pode ser útil para analisar qualquer conjunto de dados de natureza histórica, como observações meteorológicas, leituras de sensores ou trilhas de auditoria. Em muitos desses casos de uso, ASOF JOIN pode ser usado para associar dados quando leituras de diferentes dispositivos possuem carimbos de data/hora que não são exatamente iguais.

A suposição é que os dados de série temporal que você precisa analisar existem em duas tabelas e há um carimbo de data/hora para cada linha em cada tabela. Este carimbo de data/hora representa a data e hora “a partir de” de um evento registrado. Para cada linha na primeira tabela (ou à esquerda), a junção usa uma “condição de correspondência” com um operador de comparação especificado para localizar uma única linha na segunda tabela (ou à direita) em que o valor do carimbo de data/hora é um dos seguintes:

  • Menor ou igual ao valor do carimbo de data/hora na tabela à esquerda.

  • Maior ou igual ao valor do carimbo de data/hora na tabela à esquerda.

  • Menor que o valor do carimbo de data/hora na tabela à esquerda.

  • Maior que o valor do carimbo de data/hora na tabela à esquerda.

A linha de qualificação no lado direito é a correspondência mais próxima, que pode ser igual no tempo, mais cedo ou mais tarde, dependendo do operador de comparação especificado.

A cardinalidade do resultado de ASOF JOIN é sempre igual à cardinalidade da tabela esquerda. Se a tabela esquerda contiver 40 milhões de linhas, ASOF JOIN retornará 40 milhões de linhas. Portanto, a tabela da esquerda pode ser considerada a tabela “de preservação” e a tabela da direita como a tabela “referenciada”.

Exemplo conceitual de uma consulta ASOF JOIN

Por exemplo, em um aplicativo financeiro, você pode ter uma tabela chamada quotes e uma tabela chamada trades. Uma tabela registra o histórico de ofertas de compra de ações e a outra registra o histórico de negociações reais. Uma oferta de compra de ações acontece antes da negociação (ou possivelmente no “mesmo” momento, dependendo da granularidade do tempo registrado). Ambas as tabelas possuem carimbos de data/hora e outras colunas de interesse que você pode querer comparar. Uma simples consulta ASOF JOIN retornará a cotação mais próxima (no tempo) antes de cada negociação. Em outras palavras, a consulta pergunta: qual era o preço de uma determinada ação no momento em que fiz a negociação?

Suponha que a tabela trades contenha três linhas e a tabela quotes contenha sete linhas. A cor de fundo das células mostra quais três linhas de quotes se qualificarão para ASOF JOIN quando as linhas forem unidas em símbolos de ações correspondentes e suas colunas de carimbo de data/hora forem comparadas.

Tabela TRADES (tabela esquerda ou “de preservação”)

Dados da tabela de negociações, composta por três linhas, que são unidas a três linhas na tabela de cotações.

Tabela QUOTES (tabela direita ou “referenciada”)

Dados da tabela de cotações, consistindo em sete linhas, identificando as três linhas específicas que se qualificam para a junção com a tabela de cotações.

Para ver a sintaxe que produz a combinação dessas três linhas destacadas (e muitos outros exemplos), consulte Junção com condições ON e correspondência.