Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
O serviço Time Series Insights será desativado em 7 de julho de 2024. Considere migrar ambientes existentes para soluções alternativas o mais rápido possível. Para obter mais informações sobre a substituição e a migração, visite nossa documentação.
Seu ambiente Azure Time Series Insights Gen2 criará dinamicamente as colunas de seus armazenamentos quentes e frios, seguindo um conjunto específico de convenções de nomenclatura. Quando um evento é ingerido, um conjunto de regras é aplicado à carga JSON, bem como aos nomes de propriedade. Isso abrange o escape de determinados caracteres especiais e o nivelamento de objetos JSON aninhados. É importante ter conhecimento sobre dessas regras para compreender de que maneira a forma do JSON influenciará como os eventos são armazenados e consultados. Veja na tabela abaixo a lista completa de regras. Exemplos A & B também demonstram como você é capaz de agrupar várias séries temporais com eficiência em uma matriz.
Importante
- Examine as regras abaixo antes de selecionar uma propriedade de ID da Série Temporal e/ou o carimbo de data/hora de origem do evento propert(ies). Se sua ID TS ou carimbo de data/hora estiver dentro de um objeto aninhado, ou contiver um ou mais dos caracteres especiais listados abaixo, é importante garantir que o nome da propriedade que você fornecer corresponda ao nome da coluna após a aplicação das regras de ingestão. Veja o exemplo B abaixo.
Regra | JSON de exemplo | Sintaxe de Expressão de Série Temporal | Nome da coluna de propriedade em Parquet |
---|---|---|---|
Os tipos de dados do Azure Time Series Insights Gen2 estão anexados ao final do nome da coluna como "_<tipoDeDados>" | "type": "Accumulated Heat" |
$event.type.String |
type_string |
A propriedade timestamp da origem do evento será salva no Azure Time Series Insights Gen2 como "timestamp" no armazenamento, e o valor será armazenado em UTC. Você pode personalizar a propriedade de timestamp da(s) fonte(s) do evento para atender às necessidades da sua solução, mas o nome da coluna no armazenamento quente e frio é "timestamp". Outras propriedades JSON de datetime que não são o timestamp de origem do evento serão salvas com "_datetime" no nome da coluna, conforme mencionado na regra acima. | "ts": "2020-03-19 14:40:38.318" |
$event.$ts |
timestamp |
Nomes de propriedades JSON que abrangem os caracteres especiais. [ \ e ' são escapados com [' e '] | "id.wasp": "6A3090FD337DE6B" |
$event['id.wasp'].String |
['id.wasp']_string |
Em [' e '], há o escape adicional de aspas simples e barras invertidas. A aspa simples é escrita como \’, e a barra invertida como \\ | "Foo's Law Value": "17.139999389648" |
$event['Foo\'s Law Value'].Double |
['Foo\'s Law Value']_double |
Os objetos JSON aninhados são nivelados com um ponto como separador. Há suporte para o aninhamento de até 10 níveis. | "series": {"value" : 316 } |
$event.series.value.Long , $event['series']['value'].Long ou $event.series['value'].Long |
series.value_long |
As matrizes de tipos primitivos são armazenadas como um tipo dinâmico | "values": [154, 149, 147] |
Os tipos dinâmicos só podem ser recuperados por meio da API GetEvents | values_dynamic |
Arrays que contêm objetos têm dois comportamentos, dependendo do conteúdo do objeto: se a(s) ID(s) de TS ou a(s) propriedade(s) de carimbo de data/hora estiver(em) dentro dos objetos em uma array, a array será desdobrada de modo que o conteúdo JSON inicial produza múltiplos eventos. Isso permite que você lote vários eventos em uma estrutura JSON. Todas as propriedades de nível superior que são pares da matriz serão salvas com cada objeto não registrado. Se suas ID(s) TS e carimbo de data/hora não estiverem dentro da matriz, eles serão salvos inteiramente como o tipo dinâmico. | Veja os exemplos A, B e C abaixo | ||
Matrizes contendo elementos mistos não são achatadas. | "values": ["foo", {"bar" : 149}, 147] |
Os tipos dinâmicos só podem ser recuperados por meio da API GetEvents | values_dynamic |
512 caracteres é o limite de nome da propriedade JSON. Se o nome exceder 512 caracteres, ele será truncado para 512 e '_<'hashCode'>' será acrescentado. Observe que isso também se aplica a nomes de propriedade que foram concatenados a partir de um objeto achatado, denotando um caminho de objeto aninhado. | "data.items.datapoints.values.telemetry<...continuing to over 512 chars>" : 12.3440495 |
"$event.data.items.datapoints.values.telemetry<...continuing to include all chars>.Double" |
data.items.datapoints.values.telemetry<...continuing to 512 chars>_912ec803b2ce49e4a541068d495ab570_double |
Compreendendo o comportamento dual para matrizes
As matrizes de objetos serão armazenadas por inteiro ou divididas em vários eventos, dependendo de como você modelar seus dados. Isso permite que você use uma matriz para eventos em lote e evite repetir propriedades de telemetria definidas no nível do objeto raiz. O envio em lote pode ser vantajoso, pois resulta em menos Hubs de Eventos ou mensagens de Hub IoT enviadas.
No entanto, em alguns casos, matrizes que contêm objetos só são significativas no contexto de outros valores. A criação de vários eventos renderiza os dados sem significado. Para garantir que uma matriz de objetos seja armazenada as-is como um tipo dinâmico, siga as diretrizes de modelagem de dados abaixo e dê uma olhada no exemplo C
Como saber se minha matriz de objetos produzirá vários eventos
Se uma ou mais de suas IDs da Série Temporal estiverem aninhadas em objetos em uma matriz ou se a propriedade de carimbo de data/hora de origem do evento estiver aninhada, o mecanismo de ingestão a dividirá para criar vários eventos. Os nomes de propriedade que você forneceu para suas IDs de TS e/ou carimbo de data/hora devem seguir as regras de achatamento acima e, portanto, indicarão a forma do seu JSON. Veja os exemplos abaixo e confira o guia sobre como selecionar uma propriedade de ID de Série Temporal.
Exemplo A
ID da Série Temporal na raiz do objeto e no carimbo de data/hora aninhado
ID da Série Temporal do Ambiente:"id"
Carimbo de data/hora de origem do evento:"values.time"
Conteúdo JSON:
[
{
"id": "caaae533-1d6c-4f58-9b75-da102bcc2c8c",
"values": [
{
"time": "2020-05-01T00:59:59.000Z",
"value": 25.6073
},
{
"time": "2020-05-01T01:00:29.000Z",
"value": 43.9077
}
]
},
{
"id": "1ac87b74-0865-4a07-b512-56602a3a576f",
"values": [
{
"time": "2020-05-01T00:59:59.000Z",
"value": 0.337288
},
{
"time": "2020-05-01T01:00:29.000Z",
"value": 4.76562
}
]
}
]
Resultado no arquivo Parquet:
A configuração e o conteúdo acima produzirão três colunas e quatro eventos
carimbo de data/hora | id_string | values.value_double |
---|---|---|
2020-05-01T00:59:59.000Z |
caaae533-1d6c-4f58-9b75-da102bcc2c8c |
25.6073 |
2020-05-01T01:00:29.000Z |
caaae533-1d6c-4f58-9b75-da102bcc2c8c |
43.9077 |
2020-05-01T00:59:59.000Z |
1ac87b74-0865-4a07-b512-56602a3a576f |
0.337288 |
2020-05-01T01:00:29.000Z |
1ac87b74-0865-4a07-b512-56602a3a576f |
4.76562 |
Exemplo B
ID da série temporal composta com uma propriedade aninhada
ID da Série Temporal do Ambiente:"plantId"
e "telemetry.tagId"
Carimbo de data/hora de origem do evento:"timestamp"
Conteúdo JSON:
[
{
"plantId": "9336971",
"timestamp": "2020-01-22T16:38:09Z",
"telemetry": [
{
"tagId": "100231-A-A6",
"tagValue": -31.149018
},
{
"tagId": "100231-A-A1",
"tagValue": 20.560796
},
{
"tagId": "100231-A-A9",
"tagValue": 177
},
{
"tagId": "100231-A-A8",
"tagValue": 420
},
]
},
{
"plantId": "9336971",
"timestamp": "2020-01-22T16:42:14Z",
"telemetry": [
{
"tagId": "103585-A-A7",
"value": -30.9918
},
{
"tagId": "103585-A-A4",
"value": 19.960796
}
]
}
]
Resultado no arquivo Parquet:
A configuração e o conteúdo acima produzirão quatro colunas e seis eventos
carimbo de data/hora | plantId_string | telemetry.tagId_string | telemetria.valor_duplo |
---|---|---|---|
2020-01-22T16:38:09Z |
9336971 |
100231-A-A6 |
-31.149018 |
2020-01-22T16:38:09Z |
9336971 |
100231-A-A1 |
20.560796 |
2020-01-22T16:38:09Z |
9336971 |
100231-A-A9 |
177 |
2020-01-22T16:38:09Z |
9336971 |
100231-A-A8 |
420 |
2020-01-22T16:42:14Z |
9336971 |
100231-A-A7 |
-30.9918 |
2020-01-22T16:42:14Z |
9336971 |
100231-A-A4 |
19.960796 |
Exemplo C
ID da Série Temporal e o carimbo de data/hora estão na raiz do objeto
ID da Série Temporal Ambiental:"id"
Carimbo de data/hora de origem do evento:"timestamp"
Conteúdo JSON:
{
"id": "800500054755",
"timestamp": "2020-11-01T10:00:00.000Z",
"datapoints": [{
"value": 120
},
{
"value": 124
}
]
}
Resultado no arquivo Parquet:
A configuração e o conteúdo acima produzirão três colunas e um evento
carimbo de data/hora | id_string | pontos_de_dados_dinâmicos |
---|---|---|
2020-11-01T10:00:00.000Z |
800500054755 |
[{"value": 120},{"value":124}] |
Próximas etapas
- Entender as limitações de taxa de transferência do seu ambiente