Saída do Armazenamento de Blobs do Azure e do Data Lake Storage Gen2 do Stream Analytics

O Azure Data Lake Storage Gen2 faz do Armazenamento do Microsoft Azure a base para a criação de data lakes corporativos no Azure. O Data Lake Storage Gen2 foi projetado para atender a vários petabytes de informações e, ao mesmo tempo, sustentar centenas de gigabits de taxa de transferência. Você pode usá-lo para gerenciar facilmente grandes quantidades de dados. Uma parte fundamental do Data Lake Storage Gen2 é a adição de um namespace hierárquico ao Armazenamento de Blobs do Azure.

O Armazenamento de Blobs oferece uma solução econômica e escalonável para armazenar grandes quantidades de dados não estruturados na nuvem. Para obter uma introdução sobre o Armazenamento de Blobs e seu uso, consulte Upload, download e lista de blobs com o portal do Microsoft Azure.

Observação

Para obter informações sobre os comportamentos específicos dos formatos Avro e Parquet, consulte as seções relacionadas na visão geral.

Configuração de saída

A tabela a seguir lista os nomes das propriedades e suas descrições para a criação de um blob ou saída do Data Lake Storage Gen2.

Nome da propriedade Descrição
Alias de saída Um nome amigável usado em consultas para direcionar a saída da consulta para esse blob.
Conta de armazenamento O nome da conta de armazenamento para a qual você está enviando a saída.
Chave da conta de armazenamento A chave secreta associada à conta de armazenamento.
Contêiner 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.

Um nome de contêiner dinâmico é opcional. Ele dá suporte a um e apenas um {field} dinâmico no nome do contêiner. O campo deve existir nos dados de saída e seguir a política de nome de contêiner.

O tipo de dados do campo deve ser string. Para usar vários campos dinâmicos ou combinar texto estático com um campo dinâmico, você pode defini-lo na consulta com funções de cadeia de caracteres internas, como CONCAT e LTRIM.
Formato de serialização do evento O formato de serialização para dados de saída. Há suporte para JSON, CSV, Avro e Parquet. O Delta Lake está listado como opção. Os dados estão no formato Parquet se Delta Lake estiver selecionado. Saiba mais sobre o Delta Lake.
Nome do caminho delta Obrigatório quando o formato de serialização do evento for Delta Lake. O caminho que é usado para gravar a tabela Delta Lake no contêiner especificado. Ele inclui o nome da tabela. Para obter mais informações e exemplos, consulte Gravar em uma tabela Delta Lake.
Modo de gravação O modo de gravação controla a maneira como o Azure Stream Analytics grava em um arquivo de saída. A entrega exatamente uma vez só acontece quando o modo de gravação é Uma vez. Para obter mais informações, consulte a próxima seção.
Coluna de partição Opcional. O nome {field} de seus dados de saída para a partição. Há suporte apenas para uma coluna de partição.
Padrão de caminho Obrigatório quando o formato de serialização do evento for Delta Lake. O padrão do caminho do arquivo que é usado para gravar seus blobs no contêiner especificado.

No padrão de caminho, você pode optar por usar uma ou mais instâncias das variáveis de data e hora para especificar a frequência em que os blobs são gravados: {date}, {time}.

Se o modo de gravação for Uma vez, você precisará usar {date} e {time}.

Você pode usar o particionamento de blobs personalizado para especificar um nome {field} personalizado dos dados do evento para particionar blobs. O nome do campo é alfanumérico e pode incluir espaços, hífens e sublinhados. As restrições em campos personalizados incluem as seguintes:
  • Nenhum nome {field} personalizado dinâmico é permitido se o modo de gravação for Uma vez.
  • Os nomes de campo não diferenciam maiúsculas de minúsculas. Por exemplo, o serviço não pode diferenciar entre a coluna ID e a coluna id.
  • Campos aninhados não são permitidos. Em vez disso, use um alias na consulta de trabalho para “nivelar” o campo.
  • As expressões não podem ser usadas como um nome de campo.

Esse recurso permite o uso de configurações de especificador de formato personalizado de data/hora no caminho. Os formatos personalizados de data/hora devem ser especificados um de cada vez e colocados entre a palavra-chave {datetime:\<specifier>}. As entradas permitidas para \<specifier> são yyyy, MM, M, dd, d, HH, H, mm, m, ss ou s. A palavra-chave {datetime:\<specifier>} pode ser usada várias vezes no caminho para formar configurações personalizadas de data/hora.

Exemplos:
  • Exemplo 1: cluster1/logs/{date}/{time}
  • Exemplo 2: cluster1/logs/{date}
  • Exemplo 3: cluster1/{client_id}/{date}/{time}
  • Exemplo 4: cluster1/{datetime:ss}/{myField} em que a consulta é SELECT data.myField AS myField FROM Input;
  • Exemplo 5: cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

O registro de data e hora da estrutura de pastas criada segue o UTC (Tempo Universal Coordenado) e não o horário local. System.Timestamp é a hora usada para todo o particionamento baseado em tempo.

A nomenclatura de arquivo usa a seguinte convenção:

{Path Prefix Pattern}/schemaHashcode_Guid_Number.extension

Aqui, Guid representa o identificador exclusivo atribuído a um gravador interno criado para gravar em um arquivo de blob. O número representa o índice do bloco de blobs.

Exemplo de arquivos de saída:
  • Myoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csv

Para obter mais informações sobre esse recurso, consulte Particionamento de saída de blobs personalizados do Azure Stream Analytics.
Formato de data Obrigatório quando o formato de serialização do evento for Delta Lake. Se o token de data for usado no caminho do prefixo, você pode selecionar o formato de data na qual os arquivos são organizados. Um exemplo é YYYY/MM/DD.
Formato de hora Obrigatório quando o formato de serialização do evento for Delta Lake. Se o token de hora for usado no caminho do prefixo, você pode selecionar o formato de hora na qual os arquivos são organizados.
Mínimo de linhas O número mínimo de linhas por lote. Para o Parquet, cada lote cria um novo arquivo. O valor padrão atual é de 2.000 linhas, e o máximo permitido é de 10.000 linhas.
Tempo máximo O tempo máximo de espera por lote. Após esse período, o lote é gravado na saída mesmo que o requisito mínimo de linhas não seja atendido. O valor padrão atual é de 1 minuto, e o máximo permitido é de 2 horas. Se a saída de blobs tiver a frequência de padrão do caminho, o tempo de espera não poderá ser maior que o intervalo de tempo da partição.
Codificação Se você estiver usando o formato CSV ou JSON, a codificação deverá ser especificada. UTF-8 é o único formato de codificação com suporte no momento.
Delimitador Aplicável somente à serialização de CSV. O Stream Analytics dá suporte a muitos delimitadores comuns para serializar dados CSV. Os valores com suporte são vírgula, ponto e vírgula, espaço, tab e barra vertical.
Formatar Aplicável somente à serialização de JSON. Uma Linha separada especifica que a saída é formatada com cada objeto JSON separado por uma nova linha. Se você selecionar Linha separada, o JSON será lido um objeto por vez. O conteúdo inteiro por si só não seria um JSON válido. A matriz especifica que a saída é formatada como uma matriz de objetos JSON. Essa matriz é fechada somente quando o trabalho for interrompido ou o Stream Analytics tiver passado para a próxima janela de tempo. Em geral, é preferível usar o JSON separado por linhas porque ele não exige nenhum tratamento especial enquanto o arquivo de saída ainda está sendo gravado.

Entrega exatamente uma vez (visualização pública)

A entrega de ponta a ponta exatamente uma vez ao fazer a leitura de qualquer entrada de streaming significa que os dados processados são escritos no Data Lake Storage Gen2 uma vez, sem duplicações. Quando o recurso está habilitado, seu trabalho no Stream Analytics garante que não haverá perda de dados nem duplicações na saída, mesmo após uma reinicialização iniciada pelo usuário a partir do último horário de saída. Isso simplifica seu pipeline de streaming, eliminando a necessidade de implementar e solucionar problemas de lógica de eliminação de duplicação.

Modo de gravação

Há duas maneiras de o Stream Analytics gravar em sua conta do Armazenamento de Blobs ou do Data Lake Storage Gen2. Uma delas é anexar os resultados ao mesmo arquivo ou a uma sequência de arquivos à medida que os resultados vão chegando. A outra maneira é gravar após todos os resultados da partição de tempo, quando todos os dados da partição de tempo estiverem disponíveis. A entrega exata é habilitada quando o modo de gravação é Uma vez.

Não há opção de modo de gravação para o Delta Lake. No entanto, a saída do Delta Lake também fornece garantias de exatamente uma vez usando o registro Delta. Ele não requer partição de tempo e grava resultados continuamente com base nos parâmetros de lote definidos pelo usuário.

Observação

Se preferir não usar a versão prévia do recurso para entrega exatamente uma vez, selecione Acrescentar conforme os resultados chegam.

Configuração

Para receber a entrega exata para a sua conta de Armazenamento de Blobs ou Data Lake Storage Gen2, você precisa definir as seguintes configurações:

  • Selecione Uma vez depois que todos os resultados da partição de tempo estiverem disponíveis para o Modo de Gravação.
  • Forneça o Padrão de Caminho com {date} e {time} especificados.
  • Especifique o formato de data e o formato de hora.

Limitações

  • Não há suporte para Subfluxo.
  • O Padrão de Caminho se torna uma propriedade obrigatória e deve conter tanto {date} quanto {time}. Não é permitido nenhum nome {field} personalizado dinâmico. Saiba mais sobre o padrão de caminho personalizado.
  • Se o trabalho for iniciado em um horário personalizado antes ou depois do último horário de saída, há o risco de o arquivo ser substituído. Por exemplo, quando o formato de tempo é definido como HH, o arquivo é gerado a cada hora. Se você interromper o trabalho às 8h15 e reiniciá-lo às 8h30, o arquivo gerado entre 8h e 9h abrangerá somente os dados das 8h30 às 9h. Os dados das 8h às 8h15 são perdidos, pois são sobrescritos.

Arquivos de saída de blobs

Quando você estiver usando o Armazenamento de Blobs como saída, um novo arquivo será criado no blob nos seguintes casos:

  • O arquivo atual excede o número máximo de blocos permitidos (no momento, 50.000). Você pode atingir o número máximo permitido de blocos sem atingir o tamanho máximo permitido de blobs. Por exemplo, se a taxa de saída for alta, você pode ver mais bytes por bloco, e o tamanho do arquivo é maior. Se a taxa de saída for baixa, cada bloco tem menos dados e o tamanho do arquivo é menor.
  • Há uma alteração de esquema na saída, e o formato de saída requer um esquema fixo (CSV, Avro ou Parquet).
  • Um trabalho é reiniciado, seja externamente por um usuário parando e iniciando-o, ou internamente para manutenção do sistema ou recuperação de erros.
  • A consulta é totalmente particionada e um novo arquivo é criado para cada partição de saída. Isso vem do uso de PARTITION BY ou da paralelização nativa introduzida no nível de compatibilidade 1.2.
  • O usuário exclui um arquivo ou um contêiner da conta de armazenamento.
  • A saída é particionada por tempo usando o padrão de prefixo do caminho e um novo blob é usado quando a consulta se move para a próxima hora.
  • A saída é particionada por um campo personalizado e um novo blob é criado por chave de partição, caso não exista.
  • A saída é particionada por um campo personalizado, em que a cardinalidade da chave de partição excede 8.000, e um novo blob é criado por chave de partição.

Particionamento

Para a chave de partição, use os tokens {date} e {time} de seus campos de evento no padrão de caminho. Escolha o formato da data, como YYYY/MM/DD, DD/MM/YYYY ou MM-DD-YYYY. HH é usado para o formato de hora. A saída do blob pode ser particionada por um único atributo de evento personalizado {fieldname} ou {datetime:\<specifier>}. O número de gravadores de saída segue o particionamento de entrada para consultas totalmente paralelizáveis.

Tamanho do lote de saída

Para saber o tamanho máximo da mensagem, confira Limites do Armazenamento do Azure. O tamanho máximo do bloco de blob é de 4 MB e a contagem máxima de blocos de blob é de 50.000.

Limitações

  • Se um símbolo de barra (/) for usado no padrão de caminho (por exemplo, /folder2/folder3), serão criadas pastas vazias que não estarão visíveis no Gerenciador de Armazenamento.
  • O Stream Analytics adiciona ao mesmo arquivo nos casos em que um novo arquivo blob não é necessário. Isso pode fazer com que mais gatilhos sejam gerados se os serviços do Azure, como a Grade de Eventos do Azure, estiverem configurados para serem disparados em uma atualização de arquivo de blob.
  • O Stream Analytics acrescenta a um blob por padrão. Quando o formato de saída é uma matriz JSON, ela completa o arquivo ao desligar ou quando a saída se move para a próxima partição de tempo para saídas particionadas por tempo. Em alguns casos, como em uma reinicialização não limpa, é possível que o colchete de fechamento (]) da matriz JSON esteja ausente.