Usar dados de referência para pesquisas no Stream Analytics

Os dados de referência são um conjunto de dados finito que é estático ou muda lentamente na natureza. Ele é usado para realizar uma pesquisa ou para aumentar seus fluxos de dados. Os dados de referência também são conhecidos como tabela de pesquisa.

Tomemos como exemplo um cenário de IoT. Você pode armazenar metadados sobre sensores, que não mudam com frequência, em dados de referência. Em seguida, você pode juntá-lo com fluxos de dados IoT em tempo real.

O Azure Stream Analytics carrega dados de referência na memória para obter processamento de fluxo de baixa latência. Para usar dados de referência em seu trabalho do Stream Analytics, você geralmente usará uma associação de dados de referência em sua consulta.

Exemplo

Você pode ter um fluxo em tempo real de eventos gerados quando os carros passam por um pedágio. O pedágio pode capturar as placas em tempo real. Esses dados podem ser associados a um conjunto de dados estático com detalhes de registro para identificar placas de veículos que expiraram.

SELECT I1.EntryTime, I1.LicensePlate, I1.TollId, R.RegistrationId  
FROM Input1 I1 TIMESTAMP BY EntryTime  
JOIN Registration R  
ON I1.LicensePlate = R.LicensePlate  
WHERE R.Expired = '1'

O Stream Analytics suporta o Armazenamento de Blobs do Azure, o Azure Data Lake Storage Gen2 e a Base de Dados SQL do Azure como a camada de armazenamento para dados de referência. Se você tiver os dados de referência em outros armazenamentos de dados, tente usar o Azure Data Factory para extrair, transformar e carregar os dados em um dos armazenamentos de dados com suporte. Para obter mais informações, consulte Visão geral da atividade de cópia no Azure Data Factory.

Azure Blob Storage ou Azure Data Lake Storage Gen 2

Os dados de referência são modelados como uma sequência de blobs em ordem crescente da data/hora especificada no nome do blob. Os blobs só podem ser adicionados ao final da sequência usando uma data/hora maior do que a especificada pelo último blob na sequência. Os blobs são definidos na configuração de entrada.

Para obter mais informações, consulte Usar dados de referência do Armazenamento de Blobs para um trabalho do Stream Analytics.

Configurar dados de referência de blob

Para configurar seus dados de referência, primeiro você precisa criar uma entrada que seja do tipo dados de referência. A tabela a seguir explica cada propriedade que você precisa fornecer ao criar a entrada de dados de referência com sua descrição.

Property name Description
Alias de entrada Um nome amigável usado na consulta de trabalho para fazer referência a essa entrada.
Conta de armazenamento O nome da conta de armazenamento onde seus blobs estão localizados. Se estiver na mesma assinatura que seu trabalho do Stream Analytics, selecione-o na lista suspensa.
Chave da conta de armazenamento A chave secreta associada à conta de armazenamento. Essa chave será preenchida automaticamente se a conta de armazenamento estiver na mesma assinatura que seu trabalho do Stream Analytics.
Contentor de armazenamento Os contêineres fornecem um agrupamento lógico para blobs armazenados no Armazenamento de Blobs. Ao carregar um blob no Armazenamento de Blobs, você deve especificar um contêiner para esse blob.
Padrão do caminho Essa propriedade necessária é usada para localizar seus blobs dentro do contêiner especificado. Dentro do caminho, você pode optar por especificar uma ou mais instâncias das variáveis {date} e {time}.
Exemplo 1: products/{date}/{time}/product-list.csv
Exemplo 2: products/{date}/product-list.csv
Exemplo 3: product-list.csv

Se o blob não existir no caminho especificado, o trabalho do Stream Analytics aguardará indefinidamente para que o blob fique disponível.
Formato de data [opcional] Se você usou {date} dentro do padrão de caminho especificado, selecione o formato de data no qual seus blobs estão organizados na lista suspensa de formatos suportados.
Exemplo: AAAA/MM/DD ou MM/DD/AAAA
Formato de hora [opcional] Se você usou {time} dentro do padrão de caminho especificado, selecione o formato de hora no qual seus blobs são organizados na lista suspensa de formatos suportados.
Exemplo: HH, HH/mm ou HH-mm
Formato de serialização de eventos Para garantir que suas consultas funcionem da maneira esperada, o Stream Analytics precisa saber qual formato de serialização você está usando para fluxos de dados de entrada. Para dados de referência, os formatos suportados são CSV e JSON.
Codificação UTF-8 é o único formato de codificação suportado no momento.

Dados de referência estáticos

Não se espera que os seus dados de referência sejam alterados. Para habilitar o suporte para dados de referência estáticos, especifique um caminho estático na configuração de entrada.

O Stream Analytics seleciona o blob do caminho especificado. Os tokens de substituição {date} e {time} não são necessários. Como os dados de referência são imutáveis no Stream Analytics, a substituição de um blob de dados de referência estático não é recomendada.

Gerar dados de referência em um cronograma

Seus dados de referência podem ser um conjunto de dados que muda lentamente. Para atualizar os dados de referência, especifique um padrão de caminho na configuração de entrada usando os tokens de substituição {date} e {time}. O Stream Analytics seleciona as definições de dados de referência atualizadas com base nesse padrão de caminho.

Por exemplo, um padrão de com um formato de data de AAAA-MM-DD e um formato de sample/{date}/{time}/products.csv hora de HH-mm instrui o Stream Analytics a pegar o blob sample/2015-04-16/17-30/products.csv atualizado em 16 de abril de 2015, às 17h30 UTC.

O Stream Analytics verifica automaticamente se há blobs de dados de referência atualizados em um intervalo de um minuto. Um blob com o carimbo de data/hora 10:30:00 pode ser carregado com um pequeno atraso, por exemplo, 10:30:30. Você percebe um pequeno atraso no trabalho do Stream Analytics fazendo referência a esse blob.

Para evitar esses cenários, carregue o blob antes do tempo efetivo de destino, que é 10:30:00 neste exemplo. O trabalho do Stream Analytics agora tem tempo suficiente para descobrir e carregar o blob na memória e executar operações.

Nota

Atualmente, os trabalhos do Stream Analytics procuram a atualização do blob somente quando o tempo da máquina avança para o tempo codificado no nome do blob. Por exemplo, o trabalho procura o sample/2015-04-16/17-30/products.csv mais rápido possível, mas não antes de 16 de abril de 2015, às 17:30 UTC. Ele nunca procurará um blob com um tempo codificado antes do último que foi descoberto.

Por exemplo, depois que o trabalho encontra o blob sample/2015-04-16/17-30/products.csv, ele ignora todos os arquivos com uma data codificada anterior a 16 de abril de 2015, às 17h30. Se um blob de chegada sample/2015-04-16/17-25/products.csv tardia for criado no mesmo contêiner, o trabalho não o usará.

Em outro exemplo, sample/2015-04-16/17-30/products.csv só é produzido em 16 de abril de 2015, às 22h03, mas nenhum blob com uma data anterior está presente no contêiner. Em seguida, o trabalho usa esse arquivo a partir de 16 de abril de 2015, às 22h03 e usa os dados de referência anteriores até então.

Uma exceção a esse comportamento é quando o trabalho precisa reprocessar dados de volta no tempo ou quando o trabalho é iniciado pela primeira vez.

Na hora de início, o trabalho procura o blob mais recente produzido antes da hora de início especificada. Esse comportamento garante que haja um conjunto de dados de referência não vazio quando o trabalho é iniciado. Se não for possível encontrá-lo, o trabalho exibirá o seguinte diagnóstico: Initializing input without a valid reference data blob for UTC time <start time>.

Quando um conjunto de dados de referência é atualizado, um log de diagnóstico é gerado: Loaded new reference data from <blob path>. Por muitos motivos, um trabalho pode precisar recarregar um conjunto de dados de referência anterior. Na maioria das vezes, a razão é reprocessar dados passados. O mesmo log de diagnóstico é gerado nesse momento. Essa ação não implica que os dados de fluxo atuais usem dados de referência passados.

O Azure Data Factory pode ser usado para orquestrar a tarefa de criar os blobs atualizados exigidos pelo Stream Analytics para atualizar definições de dados de referência.

O Data Factory é um serviço de integração de dados baseado na nuvem que orquestra e automatiza o movimento e a transformação de dados. O Data Factory suporta a conexão a um grande número de armazenamentos de dados locais e baseados em nuvem. Ele pode mover dados facilmente em um cronograma regular que você especificar.

Para obter mais informações sobre como configurar um pipeline do Data Factory para gerar dados de referência para o Stream Analytics que são atualizados em um cronograma predefinido, consulte este exemplo do GitHub.

Dicas sobre como atualizar dados de referência de blob

  • Não substitua blobs de dados de referência porque eles são imutáveis.
  • A maneira recomendada de atualizar os dados de referência é:
    • Use {date}/{time} no padrão de caminho.
    • Adicione um novo blob usando o mesmo padrão de contêiner e caminho definido na entrada do trabalho.
    • Use uma data/hora maior do que a especificada pelo último blob na sequência.
  • Os blobs de dados de referência não são* ordenados pela hora da Última Modificação do blob. Eles só são ordenados pela data e hora especificadas no nome do blob usando as substituições {date} e {time}.
  • Para evitar ter que listar um grande número de blobs, exclua blobs antigos para os quais o processamento não será mais feito. O Stream Analytics pode ter que reprocessar uma pequena quantidade em alguns cenários, como uma reinicialização.

Base de Dados SQL do Azure

Seu trabalho do Stream Analytics recupera dados de referência do Banco de dados SQL e os armazena como um instantâneo na memória para processamento. O instantâneo dos dados de referência também é armazenado em um contêiner em uma conta de armazenamento. Você especifica a conta de armazenamento nas definições de configuração.

O contêiner é criado automaticamente quando o trabalho é iniciado. Se o trabalho parar ou entrar em um estado de falha, os contêineres criados automaticamente serão excluídos quando o trabalho for reiniciado.

Se os dados de referência forem um conjunto de dados que muda lentamente, você precisará atualizar periodicamente o instantâneo usado em seu trabalho.

Com o Stream Analytics, você pode definir uma taxa de atualização ao configurar sua conexão de entrada do Banco de dados SQL. O tempo de execução do Stream Analytics consulta sua instância do Banco de dados SQL no intervalo especificado pela taxa de atualização. A taxa de atualização mais rápida suportada é uma vez por minuto. Para cada atualização, o Stream Analytics armazena um novo instantâneo na conta de armazenamento fornecida.

O Stream Analytics fornece duas opções para consultar sua instância do Banco de dados SQL. Uma consulta de instantâneo é obrigatória e deve ser incluída em cada trabalho. O Stream Analytics executa a consulta de instantâneo periodicamente com base no intervalo de atualização. Ele usa o resultado da consulta (o instantâneo) como o conjunto de dados de referência.

A consulta de instantâneo deve se adequar à maioria dos cenários. Se você tiver problemas de desempenho com grandes conjuntos de dados e taxas de atualização rápidas, use a opção de consulta delta. As consultas que levam mais de 60 segundos para retornar um conjunto de dados de referência resultam em um tempo limite.

Com a opção de consulta delta, o Stream Analytics executa a consulta de instantâneo inicialmente para obter um conjunto de dados de referência de linha de base. Depois, o Stream Analytics executa a consulta delta periodicamente com base no intervalo de atualização para recuperar alterações incrementais. Essas alterações incrementais são continuamente aplicadas ao conjunto de dados de referência para mantê-lo atualizado. O uso da opção de consulta delta pode ajudar a reduzir o custo de armazenamento e as operações de E/S de rede.

Configurar dados de referência do Banco de Dados SQL

Para configurar os dados de referência do Banco de dados SQL, primeiro você precisa criar a entrada de dados de referência. A tabela a seguir explica cada propriedade que você precisa fornecer ao criar a entrada de dados de referência com sua descrição. Para obter mais informações, consulte Usar dados de referência de um Banco de Dados SQL para um trabalho do Stream Analytics.

Você pode usar a Instância Gerenciada SQL do Azure como uma entrada de dados de referência. Você deve configurar um ponto de extremidade público na Instância Gerenciada SQL. Em seguida, defina manualmente as seguintes configurações no Stream Analytics. Uma máquina virtual do Azure que executa o SQL Server com um banco de dados anexado também é suportada pela configuração manual dessas configurações.

Property name Description
Alias de entrada Um nome amigável usado na consulta de trabalho para fazer referência a essa entrada.
Subscrição A sua subscrição.
Base de Dados A instância do Banco de dados SQL que contém seus dados de referência. Para Instância Gerenciada SQL, você deve especificar a porta 3342. Um exemplo é sampleserver.public.database.windows.net,3342.
Username O nome de usuário associado à sua instância do Banco de dados SQL.
Palavra-passe A senha associada à sua instância do Banco de dados SQL.
Atualizar periodicamente Esta opção permite-lhe selecionar uma taxa de atualização. Selecione Ativado para especificar a taxa de atualização em DD:HH:MM.
Consulta de instantâneo Essa opção de consulta padrão recupera os dados de referência da sua instância do Banco de dados SQL.
Consulta delta Para cenários avançados com grandes conjuntos de dados e uma taxa de atualização curta, adicione uma consulta delta.

Limitação de tamanho

Use conjuntos de dados de referência com menos de 300 MB para obter o melhor desempenho. Conjuntos de dados de referência de 5 GB ou menos são suportados em trabalhos com seis unidades de streaming ou mais. O uso de um grande conjunto de dados de referência pode afetar a latência de ponta a ponta do seu trabalho.

A complexidade da consulta pode aumentar para incluir processamento com monitoração de estado, como agregações em janela, junções temporais e funções analíticas temporais. Quando a complexidade aumenta, o tamanho máximo suportado dos dados de referência diminui.

Se o Stream Analytics não puder carregar os dados de referência e executar operações complexas, o trabalho ficará sem memória e falhará. Nesses casos, a métrica de utilização percentual da unidade de streaming chega a 100%.

Número de unidades de streaming Tamanho recomendado
1 50 MB ou inferior
3 150 MB ou inferior
6 e mais além 5 GB ou inferior

O suporte para compactação não está disponível para dados de referência. Para conjuntos de dados de referência maiores que 300 MB, use o Banco de dados SQL como a fonte com a opção de consulta delta para obter um desempenho ideal. Se a opção de consulta delta não for usada nesses cenários, você verá picos na métrica de atraso da marca d'água toda vez que o conjunto de dados de referência for atualizado.

Junte vários conjuntos de dados de referência em um trabalho

Você só pode unir uma entrada de dados de referência a uma entrada de streaming. Portanto, para unir vários conjuntos de dados de referência, divida sua consulta em várias etapas. Eis um exemplo:

With Step1 as (
    --JOIN input stream with reference data to get 'Desc'
    SELECT streamInput.*, refData1.Desc as Desc
    FROM    streamInput
    JOIN    refData1 ON refData1.key = streamInput.key 
)
--Now Join Step1 with second reference data
SELECT *
INTO    output 
FROM    Step1
JOIN    refData2 ON refData2.Desc = Step1.Desc 

Trabalhos do IoT Edge

Somente dados de referência locais são suportados para trabalhos de borda do Stream Analytics. Quando um trabalho é implantado em um dispositivo IoT Edge, ele carrega dados de referência do caminho de arquivo definido pelo usuário. Tenha um arquivo de dados de referência pronto no dispositivo.

Para um contêiner do Windows, coloque o arquivo de dados de referência na unidade local e compartilhe a unidade local com o contêiner do Docker. Para um contêiner Linux, crie um volume do Docker e preencha o arquivo de dados no volume.

Os dados de referência em uma atualização do IoT Edge são acionados por uma implantação. Depois de acionado, o módulo do Stream Analytics seleciona os dados atualizados sem interromper o trabalho em execução.

Você pode atualizar os dados de referência de duas maneiras:

  • Atualize o caminho de dados de referência no seu trabalho do Stream Analytics a partir do portal do Azure.
  • Atualize a implantação do IoT Edge.

Próximos passos