Conexão de dados do Hub IoT
O Hub IoT do Azure é um serviço gerenciado e hospedado na nuvem que atua como hub central de mensagens para comunicação bidirecional entre o aplicativo de IoT e os dispositivos gerenciados. O Azure Data Explorer oferece ingestão contínua de Hubs de IoT gerenciados pelo cliente, usando seu ponto de extremidade interno compatível com o Hub de Eventos de mensagens de dispositivo para nuvem.
O pipeline de ingestão de IoT passa por várias etapas. Primeiro, você cria um Hub IoT e registra um dispositivo. Depois, você cria uma tabela de destino no Azure Data Explorer na qual os dados em um formato específico serão ingeridos usando as propriedades de ingestãoespecificadas. A conexão do Hub IoT precisa conhecer o roteamento de eventos para se conectar à tabela do Azure Data Explorer. Os dados são inseridos com as propriedades selecionadas de acordo com o mapeamento de propriedades do sistema de eventos. Esse processo pode ser gerenciado por meio do portal do Azure, programaticamente com o C#, o Python ou o modelo do Azure Resource Manager.
Para obter informações gerais sobre a ingestão de dados no Azure Data Explorer, confira Visão geral da ingestão de dados do Azure Data Explorer.
Formato de dados
- Os dados são lidos no ponto de extremidade do Hub de Eventos na forma de objetos EventData.
- Confira Formatos com suporte.
Observação
O Hub IoT não dá suporte ao formato .raw.
- Confira Compactações com suporte.
Propriedades da ingestão
As propriedades de ingestão instruem o processo de ingestão para onde rotear os dados e como processá-los. Você pode especificar as Propriedades de ingestão dos eventos usando o EventData.Properties. Defina as seguintes propriedades:
Propriedade | Descrição |
---|---|
Backup de banco de dados | Nome (diferenciar maiúsculas de minúsculas) do banco de dados de destino. Esta propriedade poderá ser usada se você quiser enviar os dados para um banco de dados diferente daquele no qual a conexão de dado foi criada (o padrão). Para rotear os dados para vários bancos de dados, primeiro você precisa configurar a conexão como uma conexão de vários bancos de dados. Para obter mais informações, confira Roteamento de evento. |
Tabela | Nome (diferenciar maiúsculas de minúsculas) da tabela de destino existente. Substitui o conjunto Table no painel Data Connection . |
Formatar | Formato dos dados. Substitui o conjunto Data format no painel Data Connection . |
IngestionMappingReference | Nome do mapeamento de ingestão existente a ser usado. Substitui o conjunto Column mapping no painel Data Connection . |
Codificação | Codificação de dados, o padrão é UTF8. Pode ser qualquer uma das codificações com suporte do .NET. |
Observação
Somente os eventos enfileirados após a criação da conexão de dados são ingeridos.
Roteamento de eventos
Ao criar uma conexão de dados com o cluster, você especifica o roteamento para o qual enviar os dados ingeridos. O roteamento padrão é definido para a tabela de destino especificada na cadeia de conexão associada ao banco de dados de destino. O roteamento padrão dos dados também é conhecido como roteamento estático. Você pode especificar um roteamento alternativo para seus dados usando as propriedades de dados de evento.
Rotear dados de evento para um banco de dados alternativo
O roteamento de dados para um banco de dados alternativo está desativado por padrão. Para enviar os dados para um banco de dados diferente, você precisa primeiro definir a conexão como uma conexão de vários bancos de dados. Para obter um exemplo de como fazer isso no portal do Azure, consulte Ativar o roteamento de vários bancos de dados. O usuário, o grupo, a entidade de serviço ou a identidade gerenciada usada para permitir o roteamento de banco de dados precisa, pelo menos, ter a função de colaborador e permissões de gravação no cluster.
Para especificar um banco de dados alternativo, defina a propriedade Banco de dados ingestão.
Aviso
Especificar um banco de dados alternativo sem definir uma conexão de dados de vários bancos de dados causará uma falha na ingestão.
Ativar o roteamento de vários bancos de dados
Para definir um banco de dados de destino alternativo, primeiro você precisa permitir o roteamento dos dados para vários bancos de dados. Use as seguintes etapas para permitir que o roteamento dos dados alterne os bancos de dados:
No portal do Azure, navegue para seu cluster.
Selecione Bancos de dados>Conexões de dados.
Crie ou edite uma conexão de dados e, no painel Conexão de dados, em Configurações de roteamento de dados, ative a opção Permitir roteamento de dados para outro banco de dados (conexão de dados de vários bancos de dados).
Rotear dados de evento para uma tabela alternativa
Você também pode especificar as propriedades da tabela de destino para cada evento, usando as propriedades do evento. A conexão roteará os dados dinamicamente conforme especificado em EventData.Properties, substituindo as propriedades estáticas para esse evento. Para especificar uma tabela alternativa, defina a propriedade de ingestão da Tabela.
Observação
Se meus dados incluírem as informações de roteamento selecionadas, você deverá fornecer as informações de roteamento necessárias como parte das propriedades de eventos.
Mapeamento de propriedades do sistema de eventos
As propriedades do sistema são uma coleção usada para armazenar as propriedades definidas pelo serviço do Hub IoT, no momento em que o evento é recebido. A conexão do Hub IoT do Azure Data Explores incorporará as propriedades selecionadas na aterrissagem dos dados na tabela.
Observação
Para mapeamento de csv
, as propriedades são adicionadas no início do registro na ordem listada na tabela abaixo. Para mapeamento de json
, as propriedades são adicionadas de acordo com os nomes de propriedade na tabela a seguir.
Propriedades do sistema
O Hub IoT expõe as seguintes propriedades do sistema para mensagens do Hub IoT do dispositivo para nuvem:
Propriedade | Descrição |
---|---|
message-id | Um identificador configurável pelo usuário para a mensagem utilizada para padrões de resposta à solicitação. Formato: Uma cadeia de caracteres que diferencia maiúsculas de minúsculas (com até 128 caracteres) de caracteres alfanuméricos ASCII de 7 bits + {'-', ':', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '$', '''} . |
iothub-enqueuedtime | Data e hora em que a mensagem Dispositivo para Nuvem foi recebida pelo Hub IoT. |
user-id | Uma ID usada para especificar a origem das mensagens. Quando as mensagens são geradas pelo Hub IoT, esse valor está definido como {iot hub name} . |
iothub-connection-device-id | Uma ID definida pelo Hub IoT em mensagens do dispositivo para a nuvem. Contém a deviceId do dispositivo que enviou a mensagem. |
iothub-connection-module-id | Uma ID definida pelo Hub IoT em mensagens do dispositivo para a nuvem. Contém a moduleId do dispositivo que enviou a mensagem. |
iothub-connection-auth-generation-id | Uma ID definida pelo Hub IoT em mensagens do dispositivo para a nuvem. Contém a connectionDeviceGenerationId (de acordo com as Propriedades de identidade de dispositivo) do dispositivo que enviou a mensagem. |
iothub-connection-auth-method | Um método de autenticação definido pelo Hub IoT em mensagens do dispositivo para a nuvem. Essa propriedade contém informações sobre o método de autenticação usado para autenticar o dispositivo que envia a mensagem. |
iothub-app-iothub-creation-time-utc | Permite que o dispositivo envie a hora de criação do evento ao enviar dados em um lote. |
iothub-creation-time-utc | Permite que o dispositivo envie a hora de criação do evento ao enviar uma mensagem em um determinado horário. |
dt-dataschema | Esse valor é definido pelo hub IoT em mensagens do dispositivo para a nuvem. Ele contém a ID do modelo do dispositivo definida na conexão do dispositivo. |
dt-subject | O nome do componente que está enviando as mensagens do dispositivo para a nuvem. |
Se você selecionou Propriedades do sistema de eventos na seção Fonte de dados da tabela, inclua as propriedades no esquema e no mapeamento da tabela.
Exemplos de mapeamento de esquema
Exemplo de mapeamento de esquema
Se os dados incluírem três colunas (Timespan
, Metric
e Value
) e as propriedades que você incluir forem iothub-connection-device-id
e sequence-number
, crie ou altere o esquema de tabela usando este comando:
.create-merge table TestTable (TimeStamp: datetime, Metric: string, Value: int, IotHubDeviceId:long, IotHubSequenceNumber:long)
Exemplo de mapeamento de CSV
Execute os comandos a seguir para adicionar dados ao início do registro. Observe os valores ordinais.
.create table TestTable ingestion csv mapping "CsvMapping1"
'['
' { "column" : "TimeStamp", "Properties":{"Ordinal":"2"}},'
' { "column" : "Metric", "Properties":{"Ordinal":"3"}},'
' { "column" : "Value", "Properties":{"Ordinal":"4"}},'
' { "column" : "IotHubDeviceId", "Properties":{"Ordinal":"0"}},'
' { "column" : "IotHubSequenceNumber", "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" : "TimeStamp", "Properties":{"Path":"$.timestamp"}},'
' { "column" : "Metric", "Properties":{"Path":"$.metric"}},'
' { "column" : "Value", "Properties":{"Path":"$.metric_value"}},'
' { "column" : "IotHubDeviceId", "Properties":{"Path":"$.iothub-connection-device-id"}},'
' { "column" : "IotHubSequenceNumber", "Properties":{"Path":"$.sequence-number"}}'
']'
Mapeamento das propriedades do usuário do evento
Não há suporte para enriquecer o conteúdo de eventos do Hub IoT com as propriedades do usuário. Considere inserir propriedades do usuário no corpo do evento upstream.
Cadeia Hub IoT
Observação
Para obter o melhor desempenho, crie todos os recursos na mesma região que o cluster do Azure Data Explorer.
Crie um Hub IoT
Crie um Hub IoT, caso você ainda não tenha um. A conexão com o Hub IoT pode ser gerenciada por meio do portal do Azure, programaticamente com o C#, o Python ou o modelo do Azure Resource Manager.
Observação
- A contagem de
device-to-cloud partitions
não pode ser alterada, portanto você deve considerar a escala de longo prazo ao definir a contagem de partições. - O grupo de consumidores precisa ser exclusivo por consumidor. Crie um grupo de consumidores dedicado para a conexão do Azure Data Explorer. Localize o recurso no portal do Azure e acesse
Built-in endpoints
para adicionar um novo grupo de consumidores. - A Conexão de Dados usa o Hub IoT
Built-in endpoint
. Se você configurar qualquer outraMessage routing endpoint
, as mensagens deixarão de fluir para oBuilt-in endpoint
, a menos que uma rota seja criada para esse ponto de extremidade. Para garantir que as mensagens continuem fluindo para o ponto de extremidade integrado se uma nova rota for adicionada, configure uma rota para o ponto de extremidade deevents
. Para obter mais informações, confira Solucionar problemas no roteamento de mensagens do Hub IoT.
Enviando eventos
Confira o projeto de exemplo que simula um dispositivo e gera dados.