Compartilhar 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 fundação para a criação de data lakes empresariais no Azure. Projetado desde o início para atender a vários petabytes de informações enquanto mantém centenas de gigabits de taxa de transferência, o Data Lake Storage Gen2 permite que você gerencie de uma maneira fácil grandes quantidades de dados. Uma parte fundamental do Data Lake Storage Gen2 é a adição de um namespace hierárquico para armazenamento de Blobs.

O Armazenamento de blobs do Azure 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 Carregar, baixar e listar blobs com o portal do Azure.

Observação

Para obter detalhes sobre os comportamentos específicos dos formatos AVRO e Parquet, confira 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 um blob ou uma saída do Azure Data Lake Storage Gen2.

Nome da propriedade Descrição
Alias de saída Um nome amigável utilizado em consultas para direcionar a saída da consulta para esse armazenamento de 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 serviço Blob do Azure. Quando você carrega um blob no serviço Blob, você deve especificar um contêiner para aquele blob.

O nome do 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 do contêiner.

O tipo de dados do campo deve ser string. Para usar vários campos dinâmicos ou combinar texto estático junto com o campo dinâmico, você pode defini-lo na consulta com funções de cadeia de caracteres interna, como CONCAT, LTRIM, etc.
Formato de serialização do evento 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 Necessário quando o formato de serialização de eventos é o Delta Lake. O caminho que é usado para gravar a tabela delta lake no contêiner especificado. Ele inclui o nome da tabela. Mais detalhes e exemplos.
Modo de Gravação O modo de gravação controla a maneira como o Azure Stream Analytics grava no arquivo de saída. A entrega exatamente uma vez só acontece quando o modo de gravação é Uma vez. Veja 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. Há suporte apenas para uma coluna de partição.
Padrão de caminho Necessário quando o formato de serialização de eventos é o Delta Lake. O padrão do caminho do arquivo que é usado para gravar seus blobs no contêiner especificado.

No padrão do 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 um particionamento de blob para especificar um nome de {field} personalizado dos dados do seu evento para os blobs de partição. 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 será permitido, se o modo de gravação for Uma vez.
  • 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 e hora devem ser especificados um de cada vez, entre a 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 as configurações personalizadas de data/hora.

Exemplos:
  • Exemplo 1: cluster1/logs /{data}/{hora}
  • Exemplo 2: cluster1/logs/{data}
  • Exemplo 3: cluster1/{client_id}/{data}/{hora}
  • 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 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 é o tempo usado para todo o particionamento baseado em tempo.

A nomenclatura de arquivo 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 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 Necessário quando o formato de serialização de eventos é o 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. Exemplo: AAAA/MM/DD
Formato de hora Necessário quando o formato de serialização de eventos é o 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 será gravado na saída mesmo que o requisito de linhas mínimas 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, uma 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 linha, porque ele não exige nenhuma manipulação especial enquanto o arquivo de saída ainda estiver sendo gravado.

Exatamente uma entrega (versão prévia pública)

Entrega exatamente uma vez de ponta a ponta, ao ler as entradas 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á habilitado, o trabalho do Stream Analytics não garante que nenhuma perda de dados e nenhuma duplicata será produzida como saída, na reinicialização iniciada pelo usuário a partir da última hora de saída. Ele simplifica muito o pipeline de streaming por não precisar implementar e solucionar problemas de lógica de eliminação de duplicação.

Modo de Gravação

O Stream Analytics usa duas maneiras para gravar na conta do Armazenamento de Blobs ou do ADLS Gen2. Uma delas é acrescentar os resultados ao mesmo arquivo ou a uma sequência de arquivos, à medida que os resultados chegam. A outra é 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 Exatamente Uma Vez é habilitada quando o Modo de Gravação é Uma Vez.

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

Observação

Se você preferir não usar a versão prévia do recurso para exatamente uma entrega, selecione Acrescentar à medida que novos resultados chegam.

Configuração

Para receber exatamente uma entrega para sua conta do Armazenamento de Blobs ou do 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 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 {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 uma hora personalizada, antes ou depois da última hora de saída, haverá o 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 abrange apenas os dados das 8h30 às 9h. Os dados das 8h às 8h15 são perdidos à medida que são substituídos.

Arquivos de saída de blobs

Ao usar 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 alcançar o número máximo permitido de blocos sem atingir o tamanho máximo permitido do blob. 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 exige esquema fixo (CSV, Avro e Parquet).
  • Um trabalho é reiniciado, seja externamente por um usuário que o interrompe e o inicia 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 chave de partição, use os tokens de {data} e {hora} dos seus campos de evento no padrão do caminho. Escolha o formato de data, como AAAA/MM/DD, DD/MM/AAAA ou MM-DD-AAAA. HH é usado para o formato de hora. A saída do blob pode ser particionada por um atributo de evento personalizado único {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 blobs é de 4 MB e a contagem máxima do bloco de blobs é 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 elas não estarã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 poderá fazer com que mais gatilhos sejam gerados se serviços do Azure, como a Grade de Eventos, estiverem configurados para serem disparados na atualização de arquivo de blob.
  • O Azure Stream Analytics acrescenta ao blob por padrão. Quando o formato de saída é uma matriz Json, ele completa o arquivo no desligamento ou quando a saída passa para a próxima partição de tempo para saídas particionadas por tempo. Em alguns casos, como uma reinicialização com erros, é possível que o "]" de encerramento esteja ausente na matriz JSON.

Próximas etapas