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