rozhraní API pro dotazy Azure Time Series Insights Gen1

Upozornění

Toto je článek Gen1.

Tento článek popisuje různá rozhraní REST Query API. ROZHRANÍ REST API jsou koncové body služby, které podporují sady operací HTTP (metod), které umožňují dotazovat Azure Time Series Insights prostředí Gen1.

Důležité

Rozhraní API pro získání prostředí

Rozhraní API Get Environment vrátí seznam prostředí, ke kterým má volající oprávnění k přístupu.

  • Koncový bod a operace:

    GET https://api.timeseries.azure.com/environments?api-version=2016-12-12
    
  • Příklad textu požadavku: Nepoužitelné

  • Příklad textu odpovědi:

    {
      "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"
          ]
        }
      ]
    }
    

    Poznámka

    Vlastnost odpovědi environmentFqdn je jedinečný plně kvalifikovaný název domény pro prostředí, který se používá v požadavcích rozhraní API pro dotazy na jednotlivá prostředí.

Získat rozhraní API pro dostupnost prostředí

Rozhraní API Pro získání dostupnosti prostředí vrátí rozdělení počtu událostí podle časového razítka události $ts. Dostupnost prostředí se ukládá do mezipaměti a doba odezvy nezávisí na počtu událostí v prostředí.

Tip

Rozhraní API pro dostupnost prostředí Get můžete použít k inicializaci prostředí front-end uživatelského rozhraní.

  • Koncový bod a operace:

    GET https://<environmentFqdn>/availability?api-version=2016-12-12
    
  • Příklad textu požadavku: Nepoužitelné

  • Příklad textu odpovědi:

    {
      "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
      }
    }
    

    Pro prostředí bez událostí se vrátí prázdný objekt.

Získání rozhraní API metadat prostředí

Rozhraní API Get Environment Metadata (Získat metadata prostředí) vrací metadata prostředí pro daný rozsah hledání. Metadata se vrátí jako sada odkazů na vlastnosti. Azure Time Series Insights Gen1 interně ukládá do mezipaměti a přibližuje metadata a může vracet více vlastností, které jsou přítomné v přesných událostech v rozsahu hledání.

  • Koncový bod a operace:

    POST https://<environmentFqdn>/metadata?api-version=2016-12-12
    
  • Struktura vstupní datové části:

    • Klauzule Search span (povinné)
  • Příklad textu požadavku:

    {
       "searchSpan": {
         "from": {"dateTime":"2016-08-01T00:00:00.000Z"},
         "to": {"dateTime":"2016-08-31T00:00:00.000Z"}
       }
    }
    
  • Příklad textu odpovědi:

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

    Prázdné properties pole je vráceno, pokud je prostředí prázdné nebo neexistují žádné události v rozsahu hledání.

    Předdefinované vlastnosti nejsou v seznamu vlastností vráceny.

Rozhraní API pro získání událostí prostředí

Rozhraní API Pro získání událostí prostředí vrátí seznam nezpracovaných událostí, které odpovídají rozsahu hledání a predikátu.

  • Koncový bod a operace:

    POST https://<environmentFqdn>/events?api-version=<apiVersion>
    
  • Struktura vstupní datové části:

    • Klauzule Search span (povinné)
    • Predikát – klauzule (volitelné)
    • Klauzule Limit (povinná)
  • Příklad textu požadavku:

    {
      "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
      }
    }
    

    Poznámka

    • Vnořené řazení (tj. řazení podle dvou nebo více vlastností) se v současné době nepodporuje.
    • Události se dají seřadit a omezit na začátek.
    • Řazení se podporuje u všech typů vlastností. Řazení závisí na relačních operátorech definovaných pro logické výrazy.
  • Příklad textu odpovědi:

    {
      "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]
        }
      ]
    }
    

Rozhraní API pro streamování událostí prostředí

Rozhraní API Get Environment Events Streamed vrátí seznam nezpracovaných událostí, které odpovídají rozsahu hledání a predikátu.

Toto rozhraní API používá protokol WebSocket Secure Protocol k streamování a vrácení částečných výsledků. Vždy vrací další události. To znamená, že nová zpráva je přidána k předchozí zprávě. Nová zpráva obsahuje nové události, které nebyly v předchozí zprávě. Předchozí zpráva by měla být při přidání nové zprávy zachována.

  • Koncový bod a operace:

    GET wss://<environmentFqdn>/events?api-version=<apiVersion>
    
  • Struktura vstupní datové části:

    • Klauzule Search span (povinné)
    • Predikát – klauzule (volitelné)
    • Klauzule Limit (povinná)
  • Příklad zprávy požadavku:

    {
      "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
        }
      }
    }
    

    Poznámka

    • Vnořené řazení (tj. řazení podle dvou nebo více vlastností) se v současné době nepodporuje.
    • Události se dají seřadit a omezit na začátek.
    • Řazení se podporuje u všech typů vlastností. Řazení závisí na relačních operátorech definovaných pro logické výrazy.
  • Příklad zprávy odpovědi:

    {
      "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
    }
    

Získat rozhraní API pro agregace prostředí

Rozhraní API Get Environment agreguje seskupuje události podle zadané vlastnosti, protože volitelně měří hodnoty jiných vlastností.

Poznámka

Hranice kbelíků podporují hodnoty 10ⁿ, 2×10ⁿ nebo 5×10ⁿ pro zarovnání a lepší podporu číselných histogramů.

  • Koncový bod a operace:

    POST https://<environmentFqdn>/aggregates?api-version=<apiVersion>
    
  • Struktura vstupní datové části:

    • Klauzule Search span (povinné)
    • Predikát – klauzule (volitelné)
    • Klauzule Aggregates (povinná)
  • Příklad textu požadavku:

    {
     "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": {}
             }
           ]
         }
       }
     ]
    }
    
  • Příklad textu odpovědi:

    {
      "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": []
    }
    

    Pokud nejsou zadány žádné výrazy míry a seznam událostí je prázdný, odpověď bude prázdná.

    Pokud jsou k dispozici míry, odpověď obsahuje jeden záznam s null hodnotou dimenze, 0 hodnotu pro počet a null hodnotu pro jiné druhy měr.

Rozhraní API pro agregaci prostředí

Funkce Get Environment agreguje streamované rozhraní API seskupuje události podle zadané vlastnosti, protože volitelně měří hodnoty jiných vlastností:

  • Toto rozhraní API používá k streamování a vrácení částečných výsledků protokol WebSocket Secure Protocol.
  • Vždy vrátí nahrazení (snímek) všech hodnot.
  • Předchozí pakety může klient zahodit.

Poznámka

Hranice kbelíků podporují hodnoty 10ⁿ, 2×10ⁿ nebo 5×10ⁿ pro zarovnání a lepší podporu číselných histogramů.

  • Koncový bod a operace:

    GET wss://<environmentFqdn>/aggregates?api-version=<apiVersion>
    
  • Struktura vstupní datové části:

    • Klauzule Search span (povinné)
    • Predikát – klauzule (volitelné)
    • Klauzule Aggregates (povinná)
  • Příklad zprávy požadavku:

    {
      "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":{}
          }]
        }]
      }
    }
    
  • Ukázkové zprávy odpovědi:

    {  
      "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
    }
    

    Pokud nejsou zadány žádné výrazy míry a seznam událostí je prázdný, odpověď bude prázdná.

    Pokud jsou k dispozici míry, odpověď obsahuje jeden záznam s null hodnotou dimenze, 0 hodnotu pro počet a null hodnotu pro jiné druhy měr.

Omezení

Při provádění dotazů se použijí následující omezení, aby bylo možné využívat prostředky mezi více prostředími a uživateli:

Příslušná rozhraní API Název limitu Limitní hodnota Ovlivněné skladové položky Poznámky
Vše Maximální velikost požadavku 32 kB S1, S2
Získání dostupnosti prostředí, získání metadat prostředí, získání událostí prostředí, streamování agregací prostředí Maximální počet souběžných požadavků na prostředí 10 S1, S2
Získání událostí prostředí, streamování agregací prostředí Maximální velikost odpovědi 16 MB S1, S2
Získání událostí prostředí, streamování agregací prostředí Maximální počet jedinečných odkazů na vlastnosti v predikátu, včetně řetězcových výrazů predikátu 50 S1, S2
Získání událostí prostředí, streamování agregací prostředí Maximální počet fulltextových hledaných termínů bez odkazu na vlastnost v řetězci predikátu 2 S1, S2 Příklad: HAS 'abc', 'abc'
Získání událostí prostředí Maximální počet událostí v odpovědi 10 000 S1, S2
Získání agregací prostředí streamovaných Maximální počet dimenzí 5 S1, S2
Získání agregací prostředí streamovaných Maximální celková kardinalita napříč všemi dimenzemi 150 000 S1, S2
Získání agregací prostředí streamovaných Maximální počet měr 20 S1, S2

Zpracování a řešení chyb

Chování vlastnosti nenalezena

U vlastností odkazovaných v dotazu, ať už jako součást predikátů nebo součástí agregací (měr), se dotaz ve výchozím nastavení pokusí přeložit vlastnost v globální vyhledávání rozsahu prostředí. Pokud se vlastnost najde, dotaz bude úspěšný. Pokud se vlastnost nenajde, dotaz selže.

Toto chování však můžete upravit tak, aby vlastnosti byly považovány za existující, ale s null hodnotami, pokud se v prostředí nenacházejí. Provedete to nastavením volitelné hlavičky x-ms-property-not-found-behavior požadavku na hodnotu UseNull.

Možné hodnoty pro hlavičku požadavku jsou UseNull nebo ThrowError (výchozí). Když nastavíte UseNull jako hodnotu, dotaz bude úspěšný, i když vlastnosti neexistují, a odpověď bude obsahovat upozornění, která zobrazí vlastnosti, které nebyly nalezeny.

Nevyřešené vlastnosti sestavy

Odkazy na vlastnosti můžete zadat pro výrazy predikátu, dimenze a míry. Pokud vlastnost s konkrétním názvem a typem pro zadaný rozsah hledání neexistuje, pokusí se přeložit vlastnost v globálním časovém rozsahu.

V závislosti na úspěchu řešení se může zobrazit následující upozornění nebo chyba:

  • Pokud v prostředí existuje vlastnost v globálním časovém intervalu, je správně vyřešena a vygeneruje se upozornění s upozorněním, že hodnota této vlastnosti odpovídá null danému rozsahu hledání.
  • Pokud vlastnost v prostředí neexistuje, vygeneruje se chyba a provádění dotazu se nezdaří.

Chybové odpovědi

Pokud se provádění dotazu nezdaří, datová část odpovědi JSON obsahuje chybovou odpověď s následující strukturou:

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

innerError Tady je nepovinný argument. Kromě základních chyb, jako je například poškozený požadavek, se vrátí následující chyby:

Stavový kód HTTP Kód chyby Příklad chybové zprávy Možné vnitřní kódy chyb
400 InvalidApiVersion Verze rozhraní API 2016 se nepodporuje. Podporované verze jsou '2016-12-12'."
400 InvalidInput "Nelze analyzovat predikátový řetězec." PredicateStringParseError
400 InvalidInput "Nelze přeložit řetězec predikátu." InvalidTypes, LimitExceeded, MissingOperand, InvalidPropertyType, InvalidLiteral, PropertyNotFound
400 InvalidInput "Více agregací není podporováno."
400 InvalidInput "Vlastnost predikátu nebyla nalezena." PropertyNotFound
400 InvalidInput "Vlastnost míry nebyla nalezena." PropertyNotFound
400 InvalidInput "Vlastnost dimenze nebyla nalezena." PropertyNotFound
400 InvalidInput Počet měr překročil limit. NumberOfMeasuresExceededLimit
400 InvalidInput "Agregační hloubka překročila limit." AggregateDepthExceededLimit
400 InvalidInput "Celková kardinalita překročila limit." TotalCardinalityExceededLimit
400 InvalidInput "Vlastnost 'from' chybí." BreaksPropertyMissing
400 InvalidInput "Vlastnost 'to' chybí." BreaksPropertyMissing
400 InvalidInput "Velikost požadavku překročila limit." RequestSizeExceededLimit
400 InvalidInput "Velikost odpovědi překročila limit." ResponseSizeExceededLimit
400 InvalidInput Počet událostí překročil limit. EventCountExceededLimit
400 InvalidInput Počet odkazů na vlastnost překročil limit. PropertyReferenceCountExceededLimit
400 Neplatnýmethod "Na cestě agregace jsou povoleny pouze požadavky Protokolu WebSocket."
400 Neplatná adresa "Adresu URL požadavku /a/b nelze analyzovat."
408 RequestTimeout "Časový limit požadavku vypršel po 30 sekundách."
503 TooManyRequests Počet souběžných požadavků 10 byl překročen pro prostředí 95880732-01b9-44ea-8d2d-4d764dfe1904. EnvRequestLimitExceeded

Upozornění

Odpověď rozhraní API pro dotazy může obsahovat seznam upozornění jako "warnings" položku v kořenovém adresáři odpovědi HTTP nebo zprávy odpovědi WebSocket. V současné době se vygenerují upozornění, pokud se vlastnost nenajde pro daný rozsah hledání, ale je nalezena v prostředí pro globální časový rozsah. Vygeneruje se také v případě, že je hlavička x-ms-property-not-found-behavior nastavena na UseNull a odkazovaná vlastnost neexistuje ani v rozsahu globální vyhledávání.

Každý objekt upozornění může obsahovat následující pole:

Název pole Typ pole Poznámky
kód Řetězec Jeden z předdefinovaných kódů upozornění
message Řetězec Podrobná zpráva s upozorněním
Cíl Řetězec Cesta JSON oddělená tečkami k vstupní datové části JSON, která způsobuje upozornění
warningDetails Slovník Volitelné; další podrobnosti upozornění (například pozice v řetězci predikátu)

Následující kód obsahuje příklady upozornění pro predikát, řetězec predikátu v rámci predikátu, dimenze a míry:

"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"
  }
]

Viz také

Další informace o registraci aplikací a programovacím modelu Azure Active Directory najdete v tématu Azure Active Directory pro vývojáře.

Další informace o parametrech požadavků a ověřování najdete v tématu Ověřování a autorizace.

Mezi nástroje, které pomáhají s testováním požadavků a odpovědí HTTP, patří:

  • Fiddleři. Tento bezplatný webový ladicí proxy server může zachycovat vaše požadavky REST, abyste mohli diagnostikovat požadavky HTTP a zprávy odpovědí.
  • JWT.io. Tento nástroj můžete použít k rychlému výpisu deklarací identity v nosným tokenu a následnému ověření jejich obsahu.
  • Postman. Toto je bezplatný nástroj pro testování požadavků HTTP a odpovědí pro ladění rozhraní REST API.

Další informace o Azure Time Series Insights Gen1 najdete v dokumentaci k Gen1.