Share via


Armazenamento de Blob e saída do Azure Data Lake Gen2 do Azure Stream Analytics

O Data Lake Storage Gen2 torna o Armazenamento do Azure a base para a criação de data lakes corporativos no Azure. Projetado desde o início para atender a vários petabytes de informações enquanto sustenta centenas de gigabits de taxa de transferência, o Data Lake Storage Gen2 permite que você gerencie facilmente grandes quantidades de dados. Uma parte fundamental do Data Lake Storage Gen2 é a adição de um namespace hierárquico ao armazenamento de Blob.

O armazenamento de Blob do Azure oferece uma solução econômica e escalável para armazenar grandes quantidades de dados não estruturados na nuvem. Para obter uma introdução sobre o armazenamento de Blob e seu uso, consulte Carregar, baixar e listar blobs com o portal do Azure.

Nota

Para obter detalhes sobre os comportamentos específicos para os 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 de propriedade e suas descrições para criar uma saída de blob ou Azure Data Lake Storage Gen2.

Property name Description
Alias de saída Um nome amigável usado em consultas para direcionar a saída da consulta para esse armazenamento de blob.
Conta de armazenamento O nome da conta de armazenamento para onde você está enviando sua saída.
Chave da conta de armazenamento A chave secreta associada à conta de armazenamento.
Contentor Um agrupamento lógico para blobs armazenados no serviço de Blob do Azure. Ao carregar um blob para o serviço Blob, você deve especificar um contêiner para esse blob.

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

O tipo de dados do campo deve ser string. Para usar vários campos dinâmicos ou combinar texto estático com campo dinâmico, você pode defini-lo na consulta com funções de cadeia de caracteres internas, como CONCAT, LTRIM, etc.
Formato de serialização de eventos Formato de serialização para dados de saída. JSON, CSV, Avro e Parquet são suportados. Delta Lake está listado como uma opção aqui. Os dados estão no formato Parquet se Delta Lake for selecionado. Saiba mais sobre Delta Lake
Nome do caminho delta Necessário quando o formato de serialização de eventos é Delta Lake. O caminho usado para gravar a tabela delta lake dentro do contêiner especificado. Inclui o nome da tabela. Mais detalhes e exemplos.
Modo de Escrita O modo de gravação controla a maneira como o Azure Stream Analytics grava no arquivo de saída. Exatamente uma vez a entrega só acontece quando o modo de gravação é Once. Mais informações na próxima seção.
Coluna de partição Opcional. O nome {field} dos dados de saída para a partição. Apenas uma coluna de partição é suportada.
Padrão do caminho Necessário quando o formato de serialização de eventos é Delta lake. O padrão de caminho de arquivo usado para gravar seus blobs dentro do 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 com que os blobs são gravados: {date}, {time}.

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

Você pode usar o particionamento de blob personalizado para especificar um nome {field} personalizado dos dados do evento para blobs de partição. O nome do campo é alfanumérico e pode incluir espaços, hífenes e sublinhados. As restrições aos campos personalizados incluem as seguintes:
  • Nenhum nome {field} personalizado dinâmico é permitido se o modo de gravação for Once.
  • Os nomes de campo não diferenciam maiúsculas de minúsculas. Por exemplo, o serviço não pode diferenciar entre coluna ID e 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 personalizadas de especificador de formato de data/hora no caminho. Os formatos de data e hora personalizados devem ser especificados um de cada vez, incluídos pela palavra-chave {datetime:<specifier>}. As entradas permitidas para <o especificador> são aaaa, 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 de data/hora personalizadas.

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} onde a consulta é: SELECT data.myField AS myField FROM Input;
  • Exemplo 5: cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

O carimbo de data/hora da estrutura de pastas criada segue UTC e não a hora local. System.Timestamp é a hora usada para todo o particionamento baseado em tempo.

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

{Padrão de prefixo de caminho}/schemaHashcode_Guid_Number.extension

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

Exemplos 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 blob personalizado do Azure Stream Analytics.
Formato de data Necessário quando o formato de serialização de eventos é Delta lake. Se o token de data for usado no caminho do prefixo, você poderá selecionar o formato de data no qual seus arquivos serão organizados. Exemplo: AAAA/MM/DD
Formato de hora Necessário quando o formato de serialização de eventos é Delta lake. Se o token de hora for usado no caminho do prefixo, especifique o formato de hora no qual seus arquivos estão organizados.
Linhas mínimas O número mínimo de linhas por lote. Para Parquet, cada lote cria um novo arquivo. O valor padrão atual é 2.000 linhas e o máximo permitido é 10.000 linhas.
Tempo máximo O tempo máximo de espera por lote. Após esse tempo, o lote será gravado na saída, mesmo que o requisito mínimo de linhas não seja atendido. O valor padrão atual é 1 minuto e o máximo permitido é 2 horas. Se a saída do blob tiver uma frequência de padrão de caminho, o tempo de espera não poderá ser maior do que o intervalo de tempo da partição.
Codificação Se você estiver usando o formato CSV ou JSON, uma codificação deverá ser especificada. UTF-8 é o único formato de codificação suportado no momento.
Delimitador Aplicável apenas para serialização CSV. O Stream Analytics suporta muitos delimitadores comuns para serialização de dados CSV. Os valores suportados são vírgula, ponto-e-vírgula, espaço, tabulação e barra vertical.
Formato Aplicável apenas para serialização JSON. A linha separada especifica que a saída é formatada fazendo com que cada objeto JSON seja separado por uma nova linha. Se você selecionar Linha separada, o JSON será lido um objeto de cada vez. Todo o conteúdo por si só não seria um JSON válido. Array especifica que a saída é formatada como uma matriz de objetos JSON. Essa matriz é fechada somente quando o trabalho é interrompido ou o Stream Analytics passa para a próxima janela da vez. Em geral, é preferível usar JSON separado por linha, porque ele não requer nenhum tratamento especial enquanto o arquivo de saída ainda está sendo gravado.

Entrega Exatamente Uma Vez (Visualização Pública)

De ponta a ponta exatamente após a entrega ao ler qualquer entrada de streaming significa que os dados processados serão gravados na saída do Azure Data Lake Storage Gen2 uma vez sem duplicatas. Quando o recurso está ativado, seu trabalho do Stream Analytics garante que não haja perda de dados e que nenhuma duplicata seja produzida como saída, na reinicialização iniciada pelo usuário a partir da última hora de saída. Ele simplifica muito seu pipeline de streaming por não ter que implementar e solucionar problemas de lógica de desduplicação.

Modo de Escrita

Há duas maneiras de o Stream Analytics gravar em seu armazenamento de Blob ou na conta ADLS Gen2. Uma delas é anexar os resultados ao mesmo arquivo ou a uma sequência de arquivos à medida que os resultados forem chegando. A outra é escrever depois de todos os resultados para a partição de tempo quando todos os dados para a partição de tempo estiver disponível. Exatamente uma vez a entrega é ativada quando o modo de gravação é uma vez.

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

Nota

Se preferir não utilizar a funcionalidade de pré-visualização exatamente após a entrega, selecione Acrescentar à medida que os resultados chegam.

Configuração

Para receber exatamente uma vez a entrega para seu armazenamento de Blob ou conta ADLS 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 seu Modo de Gravação.
  • Forneça o padrão de caminho com {date} e {time} especificados.
  • Especifique o formato de data e hora.

Limitações

  • Substream não é suportado.
  • Path Pattern torna-se uma propriedade necessária e deve conter {date} e {time}. Nenhum nome {field} personalizado dinâmico é permitido. Saiba mais sobre o padrão de caminho personalizado.
  • Se o trabalho for iniciado em um momento personalizado antes ou depois do último horário de saída, há risco de o arquivo ser substituído. Por exemplo, quando o formato de hora é HH, o arquivo é gerado a cada hora. Se você parar o trabalho às 8h15 e reiniciar o trabalho às 8h30, o arquivo gerado entre 8h e 9h cobre apenas os dados das 8h30 às 9h. Os dados das 8h às 8h15 se perdem à medida que são substituídos.

Arquivos de saída de blob

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

  • O arquivo excede o número máximo de blocos permitidos (atualmente 50.000). Você pode atingir o número máximo permitido de blocos sem atingir o tamanho máximo de blob permitido. Por exemplo, se a taxa de saída for alta, você poderá ver mais bytes por bloco e o tamanho do arquivo for maior. Se a taxa de saída for baixa, cada bloco terá menos dados e o tamanho do arquivo será menor.
  • Há uma mudança de esquema na saída, e o formato de saída requer esquema fixo (CSV, Avro, Parquet).
  • Um trabalho é reiniciado, seja externamente por um usuário parando-o 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. Ele vem do uso de PARTITION BY, ou a 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 de caminho e um novo blob é usado quando a consulta é movida para a próxima hora.
  • A saída é particionada por um campo personalizado e um novo blob é criado por chave de partição, se ela não existir.
  • A saída é particionada por um campo personalizado onde a cardinalidade da chave de partição excede 8.000 e um novo blob é criado por chave de partição.

Criação de partições

Para chave de partição, use os tokens {date} e {time} dos campos de evento no padrão de caminho. Escolha o formato de data, como AAAA/MM/DD, DD/MM/AAAA ou MM-DD-AAAA. HH é usado para o formato de tempo. A saída de 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 obter o tamanho máximo da mensagem, consulte Limites de armazenamento do Azure. O tamanho máximo do bloco de blob é de 4 MB e a contagem máxima de blob bock é de 50.000.

Limitações

  • Se um símbolo / de barra for usado no padrão de caminho (por exemplo, /folder2/folder3), as pastas vazias serão criadas e não ficarão visíveis no Gerenciador de Armazenamento
  • O Azure Stream Analytics acrescenta ao mesmo arquivo nos casos em que um novo arquivo de 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, estiverem configurados para serem acionados na atualização do arquivo de blob.
  • O Azure Stream Analytics acrescenta ao blob por padrão. Quando o formato de saída é uma matriz Json, ele conclui o arquivo no desligamento ou quando a saída se move para a próxima partição da próxima vez para saídas particionadas por tempo. Em alguns casos, como uma reinicialização não limpa, é possível que o fechamento "]" para a matriz json esteja faltando.

Próximos passos