Conexão de dados de Hubs de Eventos (Visualização)
Os Hubs de Eventos do Azure são uma plataforma de streaming de big data e um serviço de ingestão de eventos. O Azure Synapse Data Explorer oferece ingestão contínua de Hubs de Eventos gerenciados pelo cliente.
O pipeline de ingestão de Hubs de Eventos transfere eventos para o Azure Synapse Data Explorer em várias etapas. Primeiro, você cria um Hubs de Eventos no portal do Azure. Em seguida, você cria uma tabela de destino no Azure Synapse Data Explorer na qual os dados em um formato específico serão ingeridos usando as propriedades de ingestão fornecidas. A conexão dos Hubs de Eventos precisa saber o roteamento de eventos. Os dados são incorporados com propriedades selecionadas de acordo com o mapeamento de propriedades do sistema de eventos. Crie uma conexão com Hubs de Eventos para criar Hubs de Eventos e enviar eventos. Esse processo pode ser gerenciado por meio do portal do Azure, programaticamente com C# ou Python ou com o modelo do Azure Resource Manager.
Para obter informações gerais sobre a ingestão de dados no Azure Synapse Data Explorer, consulte Visão geral da ingestão de dados do Azure Synapse Data Explorer.
Formato dos dados
Os dados são lidos dos Hubs de Eventos na forma de objetos EventData .
Consulte os formatos suportados.
Nota
O Hub de Eventos não suporta o formato .raw.
Os dados podem ser compactados usando o algoritmo de
GZip
compressão. EspecifiqueCompression
as propriedades de ingestão.- A compressão de dados não é suportada para formatos comprimidos (Avro, Parquet, ORC).
- A codificação personalizada e as propriedades do sistema incorporado não são suportadas em dados compactados.
Propriedades de ingestão
As propriedades de ingestão instruem o processo de ingestão, para onde encaminhar os dados e como processá-los. Você pode especificar as propriedades de ingestão dos eventos de ingestão usando EventData.Properties. Você pode definir as seguintes propriedades:
Property | Description |
---|---|
Tabela | Nome (diferencia maiúsculas de minúsculas) da tabela de destino existente. Substitui o Table Data Connection conjunto no painel. |
Formato | Formato de dados. Substitui o Data format Data Connection conjunto no painel. |
IngestionMappingReference | Nome do mapeamento de ingestão existente a ser usado. Substitui o Column mapping Data Connection conjunto no painel. |
Compressão | Compactação de dados, None (padrão) ou GZip compactação. |
Codificação | Codificação de dados, o padrão é UTF8. Pode ser qualquer uma das codificações suportadas pelo .NET. |
Etiquetas | Uma lista de tags para associar aos dados ingeridos, formatada como uma cadeia de caracteres de matriz JSON. Há implicações de desempenho ao usar tags. |
Nota
Somente os eventos enfileirados após a criação da conexão de dados são ingeridos.
Roteamento de eventos
Ao configurar uma conexão de Hubs de Eventos com o cluster do Azure Synapse Data Explorer, você especifica as propriedades da tabela de destino (nome da tabela, formato de dados, compactação e mapeamento). O roteamento padrão para seus dados também é conhecido como static routing
.
Você também pode especificar propriedades da tabela de destino para cada evento, usando propriedades de evento. A conexão roteará dinamicamente os dados conforme especificado em EventData.Properties, substituindo as propriedades estáticas desse evento.
No exemplo a seguir, defina os detalhes dos Hubs de Eventos e envie dados de métricas meteorológicas para a tabela WeatherMetrics
.
Os dados estão no json
formato. mapping1
é pré-definido na tabela WeatherMetrics
.
Aviso
Este exemplo usa a autenticação de cadeia de conexão para se conectar a Hubs de Eventos para simplificar o exemplo. No entanto, codificar uma cadeia de conexão em seu script requer um grau muito alto de confiança no aplicativo e acarreta riscos de segurança.
Para soluções seguras e de longo prazo, use uma destas opções:
- Autenticação sem senha
- Armazene sua cadeia de conexão em um Cofre de Chaves do Azure e use esse método para recuperá-la em seu código.
var eventHubNamespaceConnectionString=<connection_string>;
var eventHubName=<event_hub>;
// Create the data
var metric = new Metric { Timestamp = DateTime.UtcNow, MetricName = "Temperature", Value = 32 };
var data = JsonConvert.SerializeObject(metric);
// Create the event and add optional "dynamic routing" properties
var eventData = new EventData(Encoding.UTF8.GetBytes(data));
eventData.Properties.Add("Table", "WeatherMetrics");
eventData.Properties.Add("Format", "json");
eventData.Properties.Add("IngestionMappingReference", "mapping1");
eventData.Properties.Add("Tags", "['mydatatag']");
// Send events
var eventHubClient = EventHubClient.CreateFromConnectionString(eventHubNamespaceConnectionString, eventHubName);
eventHubClient.Send(eventData);
eventHubClient.Close();
Mapeamento de propriedades do sistema de eventos
As propriedades do sistema armazenam propriedades definidas pelo serviço Hubs de Eventos, no momento em que o evento é enfileirado. A conexão dos Hubs de Eventos do Azure Synapse Data Explorer incorporará as propriedades selecionadas no destino de dados em sua tabela.
Nota
- As propriedades do sistema são suportadas para
json
formatos tabulares (csv
,tsv
etc.) e não são suportadas em dados compactados. Ao usar um formato sem suporte, os dados ainda serão ingeridos, mas as propriedades serão ignoradas. - Para dados tabulares, as propriedades do sistema são suportadas apenas para mensagens de eventos de registro único.
- Para dados JSON, as propriedades do sistema também são suportadas para mensagens de eventos de vários registros. Nesses casos, as propriedades do sistema são adicionadas somente ao primeiro registro da mensagem de evento.
- Para
csv
mapeamento, as propriedades são adicionadas no início do registro na ordem listada na tabela Propriedades do sistema. - Para
json
mapeamento, as propriedades são adicionadas de acordo com os nomes de propriedade na tabela Propriedades do sistema.
Propriedades do sistema
Os Hubs de Eventos expõem as seguintes propriedades do sistema:
Property | Tipo de Dados | Description |
---|---|---|
x-opt-enfileirado-tempo | datetime | Hora UTC em que o evento foi enfileirado |
x-opt-seqüência-número | long | O número de sequência lógica do evento dentro do fluxo de partição dos Hubs de Eventos |
x-opt-deslocamento | string | O deslocamento do evento do fluxo de partição dos Hubs de Eventos. O identificador de deslocamento é exclusivo dentro de uma partição do fluxo de Hubs de Eventos |
X-opt-editor | string | O nome do editor, se a mensagem tiver sido enviada para um ponto de extremidade do editor |
chave de partição x-opt | string | A chave de partição da partição correspondente que armazenou o evento |
Se você selecionou Propriedades do sistema de eventos na seção Fonte de Dados da tabela, deverá incluir as propriedades no esquema e mapeamento da tabela.
Exemplos de mapeamento de esquema
Exemplo de mapeamento de esquema de tabela
Se os dados incluírem três colunas (Timespan
, , e Value
) e as propriedades incluídas forem x-opt-enqueued-time
e x-opt-offset
, crie ou altere o esquema da tabela Metric
usando este comando:
.create-merge table TestTable (TimeStamp: datetime, Metric: string, Value: int, EventHubEnqueuedTime:datetime, EventHubOffset:string)
Exemplo de mapeamento CSV
Execute os seguintes comandos para adicionar dados ao início do registro. Observe os valores ordinais.
.create table TestTable ingestion csv mapping "CsvMapping1"
'['
' { "column" : "Timespan", "Properties":{"Ordinal":"2"}},'
' { "column" : "Metric", "Properties":{"Ordinal":"3"}},'
' { "column" : "Value", "Properties":{"Ordinal":"4"}},'
' { "column" : "EventHubEnqueuedTime", "Properties":{"Ordinal":"0"}},'
' { "column" : "EventHubOffset", "Properties":{"Ordinal":"1"}}'
']'
Exemplo de mapeamento JSON
Os dados são adicionados usando o mapeamento de propriedades do sistema. Execute estes comandos:
.create table TestTable ingestion json mapping "JsonMapping1"
'['
' { "column" : "Timespan", "Properties":{"Path":"$.timestamp"}},'
' { "column" : "Metric", "Properties":{"Path":"$.metric"}},'
' { "column" : "Value", "Properties":{"Path":"$.value"}},'
' { "column" : "EventHubEnqueuedTime", "Properties":{"Path":"$.x-opt-enqueued-time"}},'
' { "column" : "EventHubOffset", "Properties":{"Path":"$.x-opt-offset"}}'
']'
Conexão de Hubs de Eventos
Nota
Para obter o melhor desempenho, crie todos os recursos na mesma região que o cluster do Azure Synapse Data Explorer.
Criar Hubs de Eventos
Se você ainda não tiver um, crie um Hubs de Eventos. A ligação a Hubs de Eventos pode ser gerida através do portal do Azure, programaticamente com C# ou Python ou com o modelo Azure Resource Manager.
Nota
- A contagem de partições não é alterável, portanto, você deve considerar a escala de longo prazo ao definir a contagem de partições.
- O grupo de consumidores deve ser único por consumidor. Crie um grupo de consumidores dedicado à conexão do Azure Synapse Data Explorer.
Enviar eventos
Veja o aplicativo de exemplo que gera dados e os envia para um Hubs de Eventos.
Para obter um exemplo de como gerar dados de exemplo, consulte Ingerir dados de Hubs de Eventos no Azure Synapse Data Explorer
Configurar a solução de recuperação de desastres geográficos
Os Hubs de Eventos oferecem uma solução de recuperação de desastres geográficos.
O Azure Synapse Data Explorer não oferece suporte a Alias
namespaces de Hubs de Eventos. Para implementar a recuperação de desastres geográficos em sua solução, crie duas conexões de dados de Hubs de Eventos: uma para o namespace primário e outra para o namespace secundário. O Azure Synapse Data Explorer ouvirá ambas as conexões de Hubs de Eventos.
Nota
É responsabilidade do usuário implementar um failover do namespace primário para o namespace secundário.
Próximos passos
- Ingerir dados de Hubs de Eventos no Azure Synapse Data Explorer
- Criar uma conexão de dados de Hubs de Eventos para o Azure Synapse Data Explorer usando C#
- Criar uma conexão de dados de Hubs de Eventos para o Azure Synapse Data Explorer usando Python
- Criar uma conexão de dados de Hubs de Eventos para o Azure Synapse Data Explorer usando o modelo do Azure Resource Manager