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:
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:
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:
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.