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 lentamente alterado por natureza. Ele é usado para executar uma pesquisa ou para aumentar seus fluxos de dados. Os dados de referência também são conhecidos como uma tabela de pesquisa.

Pegue um cenário de IoT como exemplo. Você poderia armazenar metadados sobre sensores, os quais não são alterados com frequência, nos dados de referência. Em seguida, você poderia associá-los a fluxos de dados IoT em tempo real.

O Azure Stream Analytics carrega dados de referência na memória para obter um processamento de fluxo de baixa latência. Para usar dados de referência no seu trabalho do Stream Analytics, geralmente é preciso usar uma união de dados de referência em sua consulta.

Exemplo

Você pode ter um fluxo em tempo real de eventos gerados quando carros passam em um pedágio. O pedágio pode capturar as placas dos carros em tempo real. Os dados podem ser unidos a um conjunto de dados estáticos que tenha detalhes de registro para identificar as placas de licença 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 é dá suporte para o Armazenamento de Blobs do Azure, o Azure Data Lake Storage Gen2 e o Banco 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 Atividade de cópia na visão geral do Azure Data Factory.

Armazenamento de Blobs do Azure ou Azure Data Lake Storage Gen2

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

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

Configurar dados de referência de blob

Para configurar os 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.

Nome da propriedade Descrição
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 estão localizados os blobs. Se ele 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 é preenchida automaticamente se a conta de armazenamento estiver na mesma assinatura que o trabalho do Stream Analytics.
Contêiner de armazenamento Os contêineres fornecem um agrupamento lógico para os 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 de caminho Essa propriedade obrigatória é usada para localizar os blobs dentro do contêiner especificado. No caminho, você pode optar por especificar uma ou mais instâncias das variáveis {date} e {time}.
Exemplo 1: products/{data}/{hora}/product-list.csv
Exemplo 2: products/{data}/product-list.csv
Exemplo 3: product-list.csv

Se o blob não existir no caminho especificado, o trabalho do Stream Analytics aguardará indefinidamente até que ele fique disponível.
Formato de data [opcional] Se você tiver usado {data} no padrão de caminho que especificou, selecione o formato de data no qual os blobs são organizados na lista suspensa de formatos com suporte.
Exemplo: AAAA/MM/DD ou MM/DD/AAAA
Formato de hora [opcional] Se você tiver usado {time} no padrão de caminho que especificou, poderá selecionar o formato de hora no qual os blobs são organizados na lista suspensa de formatos com suporte.
Exemplo: HH, HH/mm ou HH-mm
Formato de serialização do evento Para verificar se as consultas funcionam da maneira esperada, o Stream Analytics precisa saber qual formato de serialização você está usando para os fluxos de dados de entrada. Para dados de referência, os formatos com suporte são CSV e JSON.
Codificação UTF-8 é o único formato de codificação com suporte no momento.

Dados de referência estática

Talvez não seja esperado que os 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 pega o blob do caminho especificado. Os tokens de substituição de {date} e {time} não são necessários. Como os dados de referência são imutáveis no Stream Analytics, não é recomendável substituir um blob de dados de referência estáticos.

Gerar dados de referência de acordo com um agendamento

Os dados de referência podem ser um conjunto de dados de alteração lenta. 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 separa as definições de dados de referência baseadas nesse padrão de caminho.

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

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

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

Observação

Atualmente, os trabalhos do Stream Analytics procuram pela atualização de blob somente quando a hora do computador avança até a hora codificada no nome do blob. Por exemplo, a tarefa procura sample/2015-04-16/17-30/products.csv assim que possível, mas não antes de 16 de abril de 2015, às 17:30 UTC. Ele nunca procurará um blob com uma hora codificada anterior ao ú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 17:30. Se um blob sample/2015-04-16/17-25/products.csv de chegada 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 22:03, 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 22:03 e usa os dados de referência anteriores até lá.

Uma exceção a esse comportamento será iniciada quando o trabalho precisar reprocessar dados em um período anterior ou quando o trabalho for o primeiro a ser iniciado.

Na hora de início, o trabalho procura o blob mais recente produzido antes da hora especificada de início do trabalho. Esse comportamento garante que haja um conjunto de uma referência não vazia quando o trabalho for iniciado. Caso algum não seja encontrado, 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 for atualizado, um log de diagnóstico será gerado: Loaded new reference data from <blob path>. Por muitos motivos, um trabalho pode precisar recarregar um conjunto de uma referência anterior. Geralmente, o motivo é reprocessar dados antigos. 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 anteriores.

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

O Data Factory é um serviço de integração de dados baseado em nuvem que automatiza a movimentação e a transformação dos dados. O Data Factory dá suporte à conexão de um grande número de armazenamentos de dados local baseados em nuvem. Ele consegue mover dados facilmente em um agendamento 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 sejam atualizados em um cronograma predefinido, confira este exemplo de GitHub.

Dicas sobre como atualizar os dados de referência de blob

  • Não substitua blobs de dados de referência porque eles são imutáveis.
  • A maneira recomendada para 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 o caminho definido na entrada do trabalho.
    • Use um valor de data/hora maior daquele especificado 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ão ordenados apenas pela data e hora especificadas no nome do blob usando as substituições {date} e {time}.
  • Para evitar ter de listar um grande número de blobs, exclua blobs muito 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.

Banco de Dados SQL do Azure

Seu 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. Especifique a conta de armazenamento nas definições de configuração.

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

Se os dados de referência forem um conjunto de dados com alteração lenta, você precisará atualizar periodicamente o instantâneo que é usado no trabalho.

Com o Stream Analytics, você pode definir uma taxa de atualização ao configurar a conexão de entrada do Banco de Dados SQL. O runtime 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 compatível é uma vez por minuto. Para cada atualização, o Stream Analytics armazena um novo instantâneo na conta de armazenamento fornecida.

O Stream Analytics oferece duas opções de consulta da sua instância do Banco de Dados SQL. Uma consulta de instantâneo é obrigatória e precisa 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 ajustar à 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 disso, 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 aplicadas continuamente 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 os dados de referência do Banco de Dados SQL

Para configurar os dados de referência do Banco de Dados SQL, primeiro você precisará 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, confira Usar dados de referência de um Banco de Dados SQL para um trabalho do Stream Analytics.

É possível usar o Instância Gerenciada de SQL do Azure como uma entrada de dados de referência. Você deve configurar um ponto de extremidade público na Instância Gerenciada de SQL. Em seguida, defina manualmente as seguintes configurações do Stream Analytics. Uma máquina virtual do Azure que executando o SQL Server com um banco de dados anexado também tem suporte da definição manual dessas configurações.

Nome da propriedade Descrição
Alias de entrada Um nome amigável usado na consulta de trabalho para fazer referência a essa entrada.
Subscription Sua assinatura.
Banco de dados A instância do Banco de Dados SQL que contém seus dados de referência. Para a Instância Gerenciada de SQL, você deve especificar a porta 3342. Um exemplo é sampleserver.public.database.windows.net,3342.
Nome de Usuário O nome de usuário associado à sua instância do Banco de Dados SQL.
Senha A senha associada à sua instância do Banco de Dados SQL.
Atualizar periodicamente Essa opção permite que você selecione 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 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

Conjuntos de dados de referência que sejam menores que 300 MB para obter o melhor desempenho. Os conjuntos de dados de referência de 5 GB ou inferiores têm suporte em seis unidades de streaming ou mais. Usar um grande conjunto de dados de referência pode afetar a latência de ponta a ponta do trabalho.

A complexidade da consulta pode ser aumentada para incluir o processamento com estado, como agregações em janelas, junções temporais e funções de análise temporal. Quando a complexidade aumenta, o tamanho máximo suportado dos dados de referência diminui.

Se o Stream Analytics não conseguir carregar os dados de referência nem realizar operações complexas, o trabalho será executado fora da memória e falhará. Nesses casos, a métrica de utilização percentual da unidade de streaming atinge 100%.

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

O suporte para a compactação não está disponível para os 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 o 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 sempre que o conjunto de dados de referência for atualizado.

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

Você só pode ingressar uma entrada de dados de referência em uma entrada de streaming. Para unir vários conjuntos de dados de referência, divida sua consulta em várias etapas. Veja 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 loT Edge

Somente dados de referência locais têm suporte para trabalhos do edge do Stream Analytics. Quando um trabalho for implantado em um dispositivo IoT Edge, ele carregará dados de referência do caminho do 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 Docker. Para um contêiner do Linux, crie um volume do Docker e preencha o arquivo de dados para o 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 coleta os dados atualizados sem interromper o trabalho em execução.

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

  • Atualize o caminho dos dados de referência em sua tarefa do Stream Analytics do portal do Azure.
  • Atualize a implantação do IoT Edge.

Próximas etapas