Saída do Azure Blob Storage e Data Lake Storage Gen2 do Stream Analytics
O Azure Data Lake Storage Gen2 torna o Armazenamento do Azure a base para a criação de data lakes empresariais no Azure. O Data Lake Storage Gen2 foi projetado para atender a vários petabytes de informações enquanto sustenta 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 Blob Storage 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 Blobs e seu uso, consulte Carregar, baixar e listar blobs com o portal do Azure.
Nota
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 de propriedade e suas descrições para criar uma saída de blob ou 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 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 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 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 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 de eventos | O 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. Para obter mais informações e exemplos, consulte Gravar em uma tabela Delta Lake. |
Write mode | 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, veja a secção seguinte. |
Coluna de partição | Opcional. O {field} nome 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 na qual os blobs são gravados: {date} , {time} . Se o modo de gravação for Once, você precisará usar ambos e {date} {time} . Você pode usar o particionamento de blob personalizado para especificar um nome personalizado {field} 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:
Esse recurso permite o uso de configurações personalizadas de especificador de formato de data/hora no caminho. Os formatos de data/hora personalizados devem ser especificados um de cada vez e incluídos pela palavra-chave {datetime:\<specifier>} . As entradas permitidas para são , , , M , dd , d HH , , H , mm , m ss , , ou s . MM yyyy \<specifier> A {datetime:\<specifier>} palavra-chave pode ser usada várias vezes no caminho para formar configurações personalizadas de data/hora. Exemplos:
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: {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 blob. Exemplos de arquivos de saída:
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. Um exemplo é YYYY/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 é 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, a 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 não requer 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 ler qualquer entrada de streaming significa que os dados processados são gravados na saída do 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 seu pipeline de streaming ao não ter que implementar e solucionar problemas de lógica de desduplicação.
Write mode
Há duas maneiras de o Stream Analytics gravar em sua conta do Blob Storage ou do Data Lake Storage Gen2. Uma maneira é acrescentar resultados ao mesmo arquivo ou a uma sequência de arquivos à medida que os resultados estão chegando. A outra maneira é escrever depois de todos os resultados para a partição de tempo, quando todos os dados para a partição de tempo está disponível. A entrega exatamente uma vez é ativada quando o modo de gravação é Uma vez.
Não há nenhuma opção de modo de gravação para Delta Lake. No entanto, a saída Delta Lake também fornece garantias exatas usando o log Delta. Ele não requer partição de tempo e grava resultados continuamente com base nos parâmetros de lote que o usuário definiu.
Nota
Se preferir não usar o recurso de visualização para entrega exatamente uma vez, selecione Acrescentar à medida que os resultados chegam.
Configuração
Para receber exatamente uma entrega única para sua conta do Blob Storage ou do 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 seu Modo de Gravação.
- Forneça o padrão de caminho com ambos e
{date}
{time}
especificado. - Especifique o formato de data e hora.
Limitações
- Substream não é suportado.
- Path Pattern torna-se uma propriedade necessária e deve conter ambos e
{date}
{time}
. Nenhum nome personalizado{field}
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á um risco de o arquivo ser substituído. Por exemplo, quando o formato de hora é definido como 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 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 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 alteração de esquema na saída e o formato de saída requer esquema fixo (CSV, Avro ou 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
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 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 {date}
e {time}
tokens de seus campos de evento no padrão de caminho. Escolha o formato de data, como YYYY/MM/DD
, DD/MM/YYYY
ou MM-DD-YYYY
. HH
é usado para o formato de tempo. A saída de Blob pode ser particionada por um único atributo {fieldname}
de evento personalizado 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 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
), pastas vazias serão criadas e elas não ficarão visíveis no Gerenciador de Armazenamento. - O 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 do Azure, estiverem configurados para serem acionados 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, ele conclui o arquivo no desligamento ou quando a saída é movida 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 colchete de fechamento (
]
) para a matriz JSON esteja ausente.