Condividi tramite


API query Azure Time Series Insights Gen1

Attenzione

È un articolo di Gen1.

Questo articolo descrive varie API di query REST. Le API REST sono endpoint di servizio che supportano set di operazioni HTTP (metodi), che consentono di eseguire query su ambienti Azure Time Series Insights Gen1.

Importante

Ottenere l'API ambienti

L'API Get Environment restituisce l'elenco di ambienti autorizzati dal chiamante ad accedere.

  • Endpoint e operazione:

    GET https://api.timeseries.azure.com/environments?api-version=2016-12-12
    
  • Corpo della richiesta di esempio: non applicabile

  • Corpo della risposta di esempio:

    {
      "environments": [
        {
          "displayName":"Sensors",
          "environmentFqdn": "00000000-0000-0000-0000-000000000000.env.timeseries.azure.com",
          "environmentId":"00000000-0000-0000-0000-000000000000",
          "resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RdxProdAssetsEastUs/providers/Microsoft.TimeSeriesInsights/environments/Sensors",
          "roles": [
            "Reader",
            "Contributor"
          ]
        }
      ]
    }
    

    Nota

    L'ambiente della proprietà responseFqdn è un nome di dominio univoco completo per l'ambiente usato nelle richieste api query per ambiente.

Ottenere l'API di disponibilità dell'ambiente

L'API Get Environment Availability restituisce la distribuzione del conteggio degli eventi nel timestamp dell'evento $ts. La disponibilità dell'ambiente viene memorizzata nella cache e il tempo di risposta non dipende dal numero di eventi in un ambiente.

Suggerimento

L'API Get Environment Availability può essere usata per inizializzare un'esperienza dell'interfaccia utente front-end.

  • Endpoint e operazione:

    GET https://<environmentFqdn>/availability?api-version=2016-12-12
    
  • Corpo della richiesta di esempio: non applicabile

  • Corpo della risposta di esempio:

    {
      "range": {
        "from": "2016-08-01T01:02:03Z",
        "to": "2016-08-31T03:04:05Z"
      },
      "intervalSize": "1h",
      "distribution": {
        "2016-08-01T00:00:00Z": 123,
        "2016-08-31T03:00:00Z": 345
      }
    }
    

    Viene restituito un oggetto vuoto per gli ambienti senza eventi.

Ottenere l'API metadati dell'ambiente

L'API Recupera metadati dell'ambiente restituisce i metadati dell'ambiente per un determinato intervallo di ricerca. I metadati vengono restituiti come set di riferimenti alle proprietà. Azure Time Series Insights cache interne di Gen1 e metadati approssimativi e possono restituire più proprietà presenti negli eventi esatti nell'intervallo di ricerca.

  • Endpoint e operazione:

    POST https://<environmentFqdn>/metadata?api-version=2016-12-12
    
  • Struttura del payload di input:

    • Clausola di intervallo di ricerca (obbligatoria)
  • Corpo della richiesta di esempio:

    {
       "searchSpan": {
         "from": {"dateTime":"2016-08-01T00:00:00.000Z"},
         "to": {"dateTime":"2016-08-31T00:00:00.000Z"}
       }
    }
    
  • Corpo della risposta di esempio:

    {
       "properties": [
         {
           "name": "sensorId",
           "type": "String"
         },
         {
           "name": "sensorValue",
           "type": "Double"
         },
         {
           "name": "iothub-connection-device-id",
           "type": "String"
         }
       ]
    }
    

    Viene restituita una matrice vuota quando l'ambiente è vuoto properties o non sono presenti eventi in un intervallo di ricerca.

    Le proprietà predefinite non vengono restituite nell'elenco delle proprietà.

Ottenere l'API Eventi di ambiente

L'API Get Environment Events restituisce un elenco di eventi non elaborati che corrispondono all'intervallo di ricerca e al predicato.

  • Endpoint e operazione:

    POST https://<environmentFqdn>/events?api-version=<apiVersion>
    
  • Struttura del payload di input:

    • Clausola di intervallo di ricerca (obbligatoria)
    • Clausola predicato (facoltativo)
    • Clausola limite (obbligatoria)
  • Corpo della richiesta di esempio:

    {
      "searchSpan": {
        "from": {
          "dateTime": "2019-12-30T00:00:00.000Z"
        },
        "to": {
          "dateTime": "2019-12-31T23:00:00.000Z"
        }
      },
      "predicateString": "PointValue.Double = 3.14",
      "top": {
        "sort": [
          {
            "input": {
              "builtInProperty": "$ts"
            },
              "order": "Asc"
            }
        ],
        "count": 1000
      }
    }
    

    Nota

    • L'ordinamento annidato (ovvero l'ordinamento in base a due o più proprietà) non è attualmente supportato.
    • Gli eventi possono essere ordinati e limitati all'inizio.
    • L'ordinamento è supportato in tutti i tipi di proprietà. L'ordinamento si basa sugli operatori di confronto definiti per le espressioni booleane.
  • Corpo della risposta di esempio:

    {
      "warnings": [],
      "events": [
        {
          "schema": {
            "rid": 0,
            "$esn" : "buildingsensors",
            "properties" : [{
              "name" : "sensorId",
              "type" : "String"
            }, {
              "name" : "sensorValue",
              "type" : "String"
            }]
          },
          "$ts" : "2016-08-30T23:20:00Z",
          "values" : ["IndoorTemperatureSensor", 72.123]
        }, {
          "schemaRid" : 0,
          "$ts" : "2016-08-30T23:21:00Z",
          "values" : ["IndoorTemperatureSensor", 72.345]
        }
      ]
    }
    

Ottenere l'API streamed degli eventi di ambiente

L'API Get Environment Events Streamed restituisce un elenco di eventi non elaborati che corrispondono all'intervallo di ricerca e al predicato.

Questa API usa webSocket Secure Protocol per eseguire lo streaming e restituire risultati parziali. Restituisce sempre eventi aggiuntivi. Vale a dire, il nuovo messaggio è aggiuntivo a quello precedente. Il nuovo messaggio contiene nuovi eventi che non erano presenti nel messaggio precedente. Il messaggio precedente deve essere mantenuto quando viene aggiunto il nuovo messaggio.

  • Endpoint e operazione:

    GET wss://<environmentFqdn>/events?api-version=<apiVersion>
    
  • Struttura del payload di input:

    • Clausola di intervallo di ricerca (obbligatoria)
    • Clausola predicato (facoltativo)
    • Clausola limite (obbligatoria)
  • Messaggio di richiesta di esempio:

    {
      "headers" : {
        "Authorization":"Bearer <YOUR_AAD_OAUTH_TOKEN>",
        "x-ms-client-request-id" : "132gae-w343-41a1-2342-w23ta4532"
      },
      "content": {
        "searchSpan": {
          "from": "2017-04-30T23:00:00.000Z",
          "to": "2017-05-01T00:00:00.000Z"
        },
        "top": {
          "sort": [
            {
              "input": {
                "builtInProperty": "$ts"
              },
              "order": "Asc"
            }
          ],
          "count": 1000
        }
      }
    }
    

    Nota

    • L'ordinamento annidato (ovvero l'ordinamento in base a due o più proprietà) non è attualmente supportato.
    • Gli eventi possono essere ordinati e limitati all'inizio.
    • L'ordinamento è supportato in tutti i tipi di proprietà. L'ordinamento si basa sugli operatori di confronto definiti per le espressioni booleane.
  • Messaggio di risposta di esempio:

    {
      "headers": {
        "x-ms-request-id": "a325-a345-sy43-w332-a4qat36a2262"
      },
      "content": {
        "events": [
          {
            "schema": {
              "rid": 0,
              "$esn": "devicedata",
              "properties": [
                {
                  "name": "Id",
                  "type": "String"
                },
                {
                  "name": "TemperatureControlLevel",
                  "type": "Double"
                },
                {
                  "name": "Type",
                  "type": "String"
                },
                {
                  "name": "UnitVersion",
                  "type": "String"
                },
                {
                  "name": "Station",
                  "type": "String"
                },
                {
                  "name": "ProductionLine",
                  "type": "String"
                },
                {
                  "name": "Factory",
                  "type": "String"
                },
                {
                  "name": "Timestamp",
                  "type": "DateTime"
                }
              ]
            },
            "$ts": "2017-04-30T23:00:00Z",
            "values": [
              "82faa3c1-f11d-44f5-a1ca-e448f6123eee",
              0.9835468282931982,
              "temp control rate",
              "1.1.7.0",
              "Station5",
              "Line1",
              "Factory2",
              "2017-04-30T23:00:00Z"
            ]
          },
          {
            "schemaRid": 0,
            "$ts": "2017-04-30T23:00:00Z",
            "values": [
              "acb2f926-62cc-4a88-9246-94a26ebcaee3",
              0.8542095381579537,
              "temp control rate",
              "1.1.7.0",
              "Station2",
              "Line1",
              "Factory3",
              "2017-04-30T23:00:00Z"
            ]
          }
        ]
      },
      "warnings": [],
      "percentCompleted": 100
    }
    

Ottenere l'API Aggregazioni dell'ambiente

Gli eventi Get Environment Aggregates API groups di una proprietà specificata misurano facoltativamente i valori di altre proprietà.

Nota

I limiti del bucket supportano 10ⁿ, 2×10ⁿ o 5×10ⁿ valori per allinearsi e supportare meglio gli istogrammi numerici.

  • Endpoint e operazione:

    POST https://<environmentFqdn>/aggregates?api-version=<apiVersion>
    
  • Struttura del payload di input:

    • Clausola di intervallo di ricerca (obbligatoria)
    • Clausola predicato (facoltativo)
    • Clausola Aggregates (obbligatoria)
  • Corpo della richiesta di esempio:

    {
     "searchSpan": {
       "from": {
         "dateTime": "2019-12-30T00:00:00.000Z"
       },
       "to": {
         "dateTime": "2019-12-31T23:00:00.000Z"
       }
     },
     "predicateString": "PointValue.Double > 1000",
     "aggregates": [
       {
         "dimension": {
           "uniqueValues": {
             "input": {
               "property": "iothub-connection-device-id",
               "type": "String"
             },
             "take": 100
           }
         },
         "aggregate": {
           "dimension": {
             "dateHistogram": {
               "input": {
                 "builtInProperty": "$ts"
               },
               "breaks": {
                 "size": "1h"
               }
             }
           },
           "measures": [
             {
               "min": {
                 "input": {
                   "property": "series.flowRate",
                   "type": "Double"
                 }
               }
             },
             {
               "count": {}
             }
           ]
         }
       }
     ]
    }
    
  • Corpo della risposta di esempio:

    {
      "aggregates": [
        {
          "dimension": [
            "Test-Device-A11342"
          ],
          "aggregate": {
            "dimension": [
              "2019-12-30T23:00:00Z",
              "2019-12-31T00:00:00Z"
            ],
            "measures": [
              [
                [
                  0.319668575730514,
                  2678
                ],
                [
                  0.08442680357734211,
                  1238
                ]
              ]
            ]
          }
        }
      ],
      "warnings": []
    }
    

    Se non vengono specificate espressioni di misura e l'elenco di eventi è vuoto, la risposta sarà vuota.

    Se sono presenti misure, la risposta contiene un singolo record con un null valore di dimensione, un 0 valore per il conteggio e un null valore per altri tipi di misure.

Ottenere l'API streamed di aggregazioni dell'ambiente

Gli eventi Get Environment Aggregates Streamed API groups by a specificato property as facoltativamente misurano i valori di altre proprietà:

  • Questa API usa webSocket Secure Protocol per lo streaming e restituisce risultati parziali.
  • Restituisce sempre una sostituzione (snapshot) di tutti i valori.
  • I pacchetti precedenti possono essere rimossi dal client.

Nota

I limiti del bucket supportano 10ⁿ, 2×10ⁿ o 5×10ⁿ valori per allinearsi e supportare meglio gli istogrammi numerici.

  • Endpoint e operazione:

    GET wss://<environmentFqdn>/aggregates?api-version=<apiVersion>
    
  • Struttura del payload di input:

    • Clausola di intervallo di ricerca (obbligatoria)
    • Clausola predicato (facoltativo)
    • Clausola Aggregates (obbligatoria)
  • Messaggio di richiesta di esempio:

    {
      "headers":{  
        "Authorization":"Bearer <YOUR_AAD_OAUTH_TOKEN>"
      },
      "content":{  
        "predicate":{  
          "predicateString":""
        },
        "searchSpan":{  
          "from":"2017-04-30T23:00:00.000Z",
          "to":"2017-05-01T00:00:00.000Z"
        },
        "aggregates":[{  
          "dimension":{  
            "dateHistogram":{  
              "input":{  
                "builtInProperty":"$ts"
              },
              "breaks":{  
                "size":"1m"
              }
            }
          },
          "measures":[{  
            "count":{}
          }]
        }]
      }
    }
    
  • Messaggi di risposta di esempio:

    {  
      "headers":{  
        "x-ms-request-id":"abc3243-23af-23ad-3224s-a32525age"
      },
      "content":[  
        {  
          "dimension":[  
            "2017-04-30T23:00:00Z",
            "2017-04-30T23:01:00Z",
            "2017-04-30T23:02:00Z",
            "2017-04-30T23:03:00Z",
            "2017-04-30T23:04:00Z"
          ],
          "measures":[  
            [ 722 ],
            [ 721 ],
            [ 722 ],
            [ 721 ],
            [ 722 ]
          ]
        }
      ],
      "warnings":[ ],
      "percentCompleted":100
    }
    

    Se non vengono specificate espressioni di misura e l'elenco di eventi è vuoto, la risposta sarà vuota.

    Se sono presenti misure, la risposta contiene un singolo record con un null valore di dimensione, un 0 valore per il conteggio e un null valore per altri tipi di misure.

Limiti

Durante l'esecuzione delle query vengono applicati i limiti seguenti per usare equamente le risorse tra più ambienti e utenti:

API applicabili Nome limite Valore limite SKU interessati Note
Tutti Dimensioni massime richieste 32 KB S1, S2
Ottenere la disponibilità dell'ambiente, ottenere i metadati dell'ambiente, ottenere gli eventi dell'ambiente, ottenere gli aggregati dell'ambiente trasmessi Numero massimo di richieste simultanee per ambiente 10 S1, S2
Ottenere gli eventi dell'ambiente, ottenere le aggregazioni dell'ambiente in streaming Dimensioni massime della risposta 16 MB S1, S2
Ottenere gli eventi dell'ambiente, ottenere le aggregazioni dell'ambiente in streaming Numero massimo di riferimenti di proprietà univoci nel predicato, incluse le espressioni stringa del predicato 50 S1, S2
Ottenere gli eventi dell'ambiente, ottenere le aggregazioni dell'ambiente in streaming Numero massimo di termini di ricerca full-text senza riferimenti alle proprietà nella stringa del predicato 2 S1, S2 Esempio: HAS 'abc', 'abc'
Ottenere gli eventi dell'ambiente Numero massimo di eventi in risposta 10,000 S1, S2
Ottenere le aggregazioni dell'ambiente in streaming Numero massimo di dimensioni 5 S1, S2
Ottenere le aggregazioni dell'ambiente in streaming Cardinalità totale massima in tutte le dimensioni 150.000 S1, S2
Ottenere le aggregazioni dell'ambiente in streaming Numero massimo di misure 20 S1, S2

Gestione e risoluzione degli errori

Comportamento proprietà non trovato

Per le proprietà a cui si fa riferimento nella query, come parte dei predicati o parte delle aggregazioni (misure), per impostazione predefinita, la query tenta di risolvere la proprietà nell'intervallo di ricerca globale dell'ambiente. Se la proprietà viene trovata, la query ha esito positivo. Se la proprietà non viene trovata, la query ha esito negativo.

Tuttavia, è possibile modificare questo comportamento per considerare le proprietà come esistenti, ma con null valori se non sono presenti nell'ambiente. A tale scopo, impostare l'intestazione x-ms-property-not-found-behavior della richiesta facoltativa con il valore UseNull.

I valori possibili per l'intestazione della richiesta sono UseNull o ThrowError (impostazione predefinita). Quando si imposta UseNull come valore, la query avrà esito positivo anche se le proprietà non esistono e la risposta conterrà avvisi che visualizzano le proprietà non trovate.

Proprietà non risolte del report

È possibile specificare riferimenti alle proprietà per le espressioni di predicato, dimensione e misura. Se non esiste una proprietà con un nome e un tipo specifico per un intervallo di ricerca specificato, viene effettuato un tentativo di risolvere una proprietà in un intervallo di tempo globale.

A seconda dell'esito positivo della risoluzione, potrebbe essere generato l'avviso o l'errore seguente:

  • Se nell'ambiente esiste una proprietà in un intervallo di tempo globale, viene risolta in modo appropriato e viene generato un avviso per notificare che il valore di questa proprietà è null relativo a un intervallo di ricerca specificato.
  • Se non esiste una proprietà nell'ambiente, viene generato un errore e l'esecuzione della query ha esito negativo.

Risposte agli errori

Se l'esecuzione della query ha esito negativo, il payload della risposta JSON contiene una risposta di errore con la struttura seguente:

{
  "error" : {
    "code" : "...",
    "message" : "...",
    "innerError" : {  
      "code" : "...",
      "message" : "...",
    }
  }
}

In questo caso, innerError è facoltativo. Oltre agli errori di base, ad esempio una richiesta in formato non valido, vengono restituiti gli errori seguenti:

Codice di stato HTTP Codice di errore Esempio di messaggio di errore Codici di errore interni possibili
400 InvalidApiVersion "La versione API '2016' non è supportata. Le versioni supportate sono '2016-12-12'."
400 InvalidInput "Impossibile analizzare la stringa del predicato". PredicateStringParseError
400 InvalidInput "Impossibile tradurre la stringa del predicato". InvalidTypes, LimitExceeded, MissingOperand, InvalidPropertyType, InvalidLiteral, PropertyNotFound
400 InvalidInput "Non sono supportate più aggregazioni".
400 InvalidInput "Proprietà predicato non trovata". PropertyNotFound
400 InvalidInput "Impossibile trovare la proprietà measure". PropertyNotFound
400 InvalidInput "Impossibile trovare la proprietà dimension". PropertyNotFound
400 InvalidInput "Il numero di misure ha superato il limite." NumberOfMeasuresExceededLimit
400 InvalidInput "La profondità aggregata ha superato il limite." AggregateDepthExceededLimit
400 InvalidInput "La cardinalità totale ha superato il limite." TotalCardinalityExceededLimit
400 InvalidInput "Proprietà 'from' mancante". BreaksPropertyMissing
400 InvalidInput "La proprietà 'to' è mancante." BreaksPropertyMissing
400 InvalidInput "Le dimensioni della richiesta hanno superato il limite". RequestSizeExceededLimit
400 InvalidInput "Le dimensioni della risposta hanno superato il limite". ResponseSizeExceededLimit
400 InvalidInput "Numero di eventi superato il limite". EventCountExceededLimit
400 InvalidInput "Numero di riferimenti delle proprietà superato il limite". PropertyReferenceCountExceededLimit
400 InvalidMethod "Solo le richieste WebSocket sono consentite nel percorso "aggregazioni".
400 InvalidUrl "Impossibile analizzare l'URL della richiesta '/a/b'".
408 RequestTimeout "Timeout della richiesta dopo i secondi '30'".
503 TooManyRequests "Numero di richieste simultanee di '10' superato per l'ambiente '95880732-01b9-44ea-8d2d-4d764dfe1904'". EnvRequestLimitExceeded

Avvisi

Una risposta API query può contenere un elenco di avvisi come "warnings" voce nella radice della risposta HTTP o del messaggio di risposta WebSocket. Attualmente vengono generati avvisi se la proprietà non viene trovata per un determinato intervallo di ricerca, ma viene trovato in un ambiente per l'intervallo di tempo globale. Viene generato anche quando l'intestazione x-ms-property-not-found-behavior è impostata su UseNull e una proprietà a cui viene fatto riferimento non esiste nemmeno nell'intervallo di ricerca globale.

Ogni oggetto avviso può contenere i campi seguenti:

Nome del campo Tipo di campo Note
code Stringa Uno dei codici di avviso predefiniti
message Stringa Messaggio di avviso dettagliato
target Stringa Percorso JSON delimitato da punti alla voce del payload di input JSON che causa l'avviso
warningDetails Dizionario Opzionale; dettagli di avviso aggiuntivi (ad esempio, la posizione nella stringa di predicato)

Il codice seguente presenta esempi di avvisi per predicato, stringa predicato all'interno di predicato, dimensione e misura:

"warnings": [
  {
    "code": "PropertyNotFound",
    "message": "Predicate property 'X' of type 'String' is not found in local search span.",
    "target": "predicate.and[0].eq.left.property.name"
  },
  {
    "code": "PropertyNotFound",
    "message": "Predicate string property 'X' is not found in local search span.",
    "target": "predicate.and[1].predicateString",
    "warningDetails": {
      "startPos": 1,
      "endPos": 2,
      "line": 1,
      "col": 1
    }
  },
  {
    "code": "PropertyNotFound",
    "message": "Dimension property 'X' of type 'String' is not found in local search span.",
    "target": "aggregates.dimension.uniqueValues.input.property"
  },
  {
    "code": "PropertyNotFound",
    "message": "Measure property 'X' of type 'String' is not found in local search span.",
    "target": "aggregates.aggregates.measures[0].min.input.property"
  }
]

Vedi anche

Per altre informazioni sulla registrazione dell'applicazione e sul modello di programmazione di Azure Active Directory, vedere Azure Active Directory per gli sviluppatori.

Per informazioni sui parametri di richiesta e autenticazione, vedere Autenticazione e autorizzazione.

Gli strumenti che consentono di testare le richieste e le risposte HTTP includono:

  • Fiddler. Questo proxy di debug Web gratuito può intercettare le richieste REST, in modo da poter diagnosticare i messaggi di richiesta e risposta HTTP.
  • JWT.io. È possibile usare questo strumento per eseguire rapidamente il dump delle attestazioni nel token di connessione e quindi convalidarne il contenuto.
  • Postman. Si tratta di uno strumento gratuito di test di richiesta HTTP e risposta per il debug delle API REST.

Altre informazioni su Azure Time Series Insights Gen1 esaminando la documentazione di Gen1.