Query utilizzando l'API Federation
Questa guida spiega come eseguire query sui dati in Manufacturing Data Engine (MDE) utilizzando l'API Federation per i casi d'uso tipici.
La federazione fornisce l'accesso a parti dei dati di configurazione, ai dati archiviati in BigQuery o Bigtable.
Per utilizzare l'API Federation per eseguire query sui dati in Bigtable, assicurati
di aver eseguito il deployment di MDE con le "dimensioni" corrette. Per saperne di più, consulta la sezione sulle dimensioni e scegli una dimensione che esegua il deployment del job writer Dataflow richiesto e di un'istanza Bigtable. In genere, qualsiasi cosa più grande di
Pilot include le dipendenze richieste.
Introduzione
L'API Federation è una tipica API REST che restituisce strutture JSON. Per accedere all'API, utilizza il proxy MDE o l'esposizione tramite Identity-Aware Proxy.
I dati disponibili tramite l'API sono i seguenti:
| Dati disponibili | Percorso principale dell'API utilizzando il tunnel |
|---|---|
| Recuperare record da BigLake | /data/v1/bigquery |
| Recuperare record da Bigtable | /data/v1/bigtable |
| Recupera l'istanza di metadati da Metadata Manager | /data/v1/metadata |
| Recuperare tipi e tag da Config Manager | /data/v1/config |
In alcuni casi, il nome dell'attributo viene abbreviato per garantire prestazioni corrette durante il trasferimento di payload JSON di grandi dimensioni sulla rete. È possibile includere una sezione di intestazioni nella risposta che spieghi le abbreviazioni.
Parametri di ricerca generali utilizzati nelle diverse parti dell'API sono:
| Parametro di ricerca | Descrizione |
|---|---|
includeMetrics |
Nella risposta sono incluse le metriche relative alle query. |
includeHeader |
Nella risposta è inclusa un'intestazione con la spiegazione dell'abbreviazione e le statistiche della risposta. |
includeMetadata |
Quando vengono restituiti i record, questo parametro specifica se includere o meno i campi dei metadati nella risposta. Ciò può aumentare notevolmente le dimensioni dell'area di risposta e potrebbe non essere necessario. |
nextPageToken |
Se sono disponibili più dati di quelli restituiti, viene restituito un nextPageToken che può essere fornito nella richiesta successiva per ottenere la pagina successiva. Per Bigtable, nextPageToken viene sempre fornito perché non è possibile sapere se sono disponibili altri record. |
includeIds |
Includi ID riga e ID messaggio di origine. |
Di seguito è riportato un esempio di richiesta con tre dei parametri di query inclusi:
GET http://localhost:8080/data/v1/bigquery/records/primepaintingrobot-01-airhumidity/default-numeric-records/latest?includeMetrics=true&includeHeader=true&includeMetadata=true
Una risposta di esempio con i tre parametri di query inclusi sarebbe simile al seguente esempio:
{
"header": {
"startTime": "1691060884507",
"endTime": "1691060884507",
"tagCount": 1,
"dataRecordCount": 1,
"dataFields": {
"d": "duration",
"dp": "discretePayload",
"cp": "continuousPayload",
"its": "ingestTimestamp",
"cmr": "cloudMetadataRef",
"sdi": "sourceMessageId",
"np": "numericPayload",
"id": "id",
"v": "value",
"em": "embeddedMetadata",
"et": "eventTimestampEnd",
"mcm": "materializedCloudMetadata",
"t": "eventTimestamp",
"st": "eventTimestampStart"
}
},
"tags": [
{
"tagName": "primepaintingrobot-01-airhumidity",
"data": [
{
"t": "1691060884507000",
"np": {
"v": 80.7
},
"em": "{\"datatype\":\"float\",\"description\":\"This is a fake prime painting robot on NodeRed\",\"deviceID\":\"75c18751-7a94-453e-86f5-67be2b0c8fd4\",\"deviceName\":\"primepaintingrobot-01\",\"headers\":{},\"messageClassName\":\"default-numeric-value\",\"metadata\":{\"brand\":\"Philips\",\"measurementUnit\":\"percentage\",\"sensorType\":\"humidity\",\"shift\":\"Shift 4\"},\"registerId\":\"a2635b62-0e89-40ff-b172-13eea37a92c2\",\"success\":true,\"unit\":\"percentage\"}",
"mcm": "{}",
"cmr": "{}"
}
],
"typeName": "default-numeric-records"
}
],
"metrics": {
"totalTimeMS": 2766
}
}
L'API supporta il sottocampionamento lato server. Per utilizzare questa funzionalità, specifica un
intervallo di sottocampionamento nel formato:sample=Duration,Unit,Aggregation
Ad esempio: sample=[10,MINUTE,MEAN]
Parametri consentiti:
Duration:Int: un numero intero che rappresenta l'intervallo di sottocampionamento.Unit:{SECOND, MINUTE, HOUR}: l'unità di tempo per l'intervallo.Aggregation:{MEAN, SUM,MAX, MIN, COUNT}: la funzione di aggregazione da applicare.
Il sottocampionamento è disponibile per i dati di Bigtable e Bigtable. I tipi di aggregazione disponibili dipendono anche dall'archetipo.
Recuperare record da BigQuery
Di seguito è riportato un esempio di richiesta per ottenere l'ultimo record per una serie di tag con combinazione di tipi da BigQuery:
GET http://localhost:8080/data/v1/bigquery/records/default-numeric-records?tags=station-a-powerusage,station-b-powerusage&startTimestamp=1691057738790&endTimestamp=1691061338790&pageSize=100
Una risposta di esempio è simile alla seguente:
{
"header": {
"startTime": "1691061786759",
"endTime": "1691061786759",
"tagCount": 1,
"dataRecordCount": 1,
"dataFields": {
"d": "duration",
"dp": "discretePayload",
"cp": "continuousPayload",
"its": "ingestTimestamp",
"cmr": "cloudMetadataRef",
"sdi": "sourceMessageId",
"np": "numericPayload",
"id": "id",
"v": "value",
"em": "embeddedMetadata",
"et": "eventTimestampEnd",
"mcm": "materializedCloudMetadata",
"t": "eventTimestamp",
"st": "eventTimestampStart"
}
},
"tags": [
{
"tagName": "primepaintingrobot-01-airhumidity",
"data": [
{
"t": "1691061786759000",
"np": {
"v": 81.79
},
"em": "{\"datatype\":\"float\",\"description\":\"This is a fake prime painting robot on NodeRed\",\"deviceID\":\"75c18751-7a94-453e-86f5-67be2b0c8fd4\",\"deviceName\":\"primepaintingrobot-01\",\"headers\":{},\"messageClassName\":\"default-numeric-value\",\"metadata\":{\"brand\":\"Philips\",\"measurementUnit\":\"percentage\",\"sensorType\":\"humidity\",\"shift\":\"Shift 4\"},\"registerId\":\"a2635b62-0e89-40ff-b172-13eea37a92c2\",\"success\":true,\"unit\":\"percentage\"}",
"mcm": "{}",
"cmr": "{}"
}
],
"typeName": "default-numeric-records"
}
],
"metrics": {
"totalTimeMS": 2371
}
}
Di seguito è riportata una richiesta di esempio per recuperare record per tag specifici, combinazione di tipi e intervalli di tempo di inizio e fine da BigQuery:
GET http://localhost:8080/data/v1/bigquery/records/default-numeric-records?tags=station-a-powerusage,station-b-powerusage&startTimestamp=1691057738790&endTimestamp=1691061338790&pageSize=100
Una risposta parziale di esempio è simile alla seguente:
{
"tags": [
{
"tagName": "station-a-powerusage",
"data": [
{
"t": "1691061419653000",
"np": {
"v": 14.174
}
},
{
"t": "1691061418653000",
"np": {
"v": 17.979
}
},
La seguente richiesta di esempio recupera i record per una combinazione di tag e tipo da BigQuery con il sottocampionamento (il valore minimo per ogni finestra di cinque minuti nell'intervallo di tempo specificato):
GET http://localhost:8080/data/v1/bigquery/records/default-numeric-records?tags=station-a-powerusage,station-b-powerusage&startTimestamp=1691058375905&endTimestamp=1691061975905&pageSize=1000&sample=5,MINUTE,MIN
Una risposta di esempio è simile alla seguente:
{
"tags": [
{
"tagName": "station-a-powerusage",
"data": [
{
"t": "1691061775669000",
"agg": {
"v": 12.019
}
},
{
"t": "1691061475669000",
"agg": {
"v": 12.022
}
}
]
},
{
"tagName": "station-b-powerusage",
"data": [
{
"t": "1691061775702000",
"agg": {
"v": 34.092
}
},
{
"t": "1691061475702000",
"agg": {
"v": 34.201
}
}
]
}
],
"nextPageToken": "LTU3NjUwMTA5OS4w"
}
La seguente richiesta di esempio recupera i record per un tipo in cluster in base a due valori in cluster da BigQuery:
GET http://localhost:8080/data/v1/bigquery/clusteredrecords/clustered-energy-consumption-numeric-records?clusterColumnValues=DK,AAR&startTimestamp=1691062260871&endTimestamp=1691065860871
Una risposta parziale di esempio è simile alla seguente:
{
"tags": [
{
"tagName": "energymonitor2-line-total-energy",
"data": [
{
"t": "1691065853667000",
"np": {
"v": 15.148
}
},
[...]
{
"tagName": "energymonitor6-line-total-energy",
"data": [
{
"t": "1691065853710000",
"np": {
"v": 15.015
}
},
{
"t": "1691065852710000",
"np": {
"v": 18.468
}
},
[...]
La seguente richiesta di esempio recupera i tag per un tipo:
GET http://localhost:8080/data/v1/bigquery/tags/default-numeric-records?startTimestamp=1690942297865&endTimestamp=1691062297865&includeHeader=true
Una risposta parziale di esempio è simile alla seguente:
{
"header": {
"tagCount": 56,
"dataRecordCount": 56,
"dataFields": {
"typeName": "typeName",
"tagName": "tagName",
"version": "typeVersion"
}
},
"tags": [
{
"tagName": "sb01_d_voltage",
"typeVersion": "1",
"typeName": "default-numeric-records"
},
{
"tagName": "JGC_001",
"typeVersion": "1",
"typeName": "default-numeric-records"
},
Recuperare record da Bigtable
Di seguito è riportata una richiesta di esempio per ottenere record per una combinazione di tag, tipo e intervallo di tempo (ora di inizio e fine) da Bigtable:
GET http://localhost:8080/data/v1/bigtable/records/default-numeric-records?startTimestamp=1687462558476&endTimestamp=1691062558476&tags=clearcoatingrobot-01-airpressure,primepaintingrobot-01-airhumidity
Una risposta parziale di esempio è simile alla seguente:
{
"tags": [
{
"tagName": "clearcoatingrobot-01-airpressure",
"data": [
{
"t": "1691062557069",
"np": {
"v": 757.18
}
},
{
"t": "1691062556068",
"np": {
"v": 763.71
}
},
Di seguito è riportata una richiesta di esempio per ottenere l'ultimo record per una combinazione di un tag e un tipo da Bigtable:
GET http://localhost:8080/data/v1/bigtable/records/clearcoatingrobot-01-airpressure/default-numeric-records/latest?includeHeader=true
Una risposta di esempio è simile alla seguente:
{
"header": {
"startTime": "1691062700094",
"endTime": "1691062700094",
"tagCount": 1,
"dataRecordCount": 1,
"dataFields": {
"d": "duration",
"dp": "discretePayload",
"cp": "continuousPayload",
"its": "ingestTimestamp",
"cmr": "cloudMetadataRef",
"sdi": "sourceMessageId",
"np": "numericPayload",
"id": "id",
"v": "value",
"em": "embeddedMetadata",
"et": "eventTimestampEnd",
"mcm": "materializedCloudMetadata",
"t": "eventTimestamp",
"st": "eventTimestampStart"
}
},
"tags": [
{
"tagName": "clearcoatingrobot-01-airpressure",
"data": [
{
"t": "1691062700094",
"np": {
"v": 764.91
}
}
],
"typeName": "default-numeric-records"
}
]
}
Recupera l'istanza dei metadati dal gestore dei metadati
Di seguito è riportato un esempio di richiesta per ottenere l'istanza dei metadati dal gestore dei metadati:
GET http://localhost:8080/data/v1/metadata/instances/41e9a32b-e85f-4a9a-a6a2-a3784855e859?includeHeader=true
Una risposta parziale di esempio è simile alla seguente:
{
"header": {
"dataFields": {
"i": "instance",
"bv": "bucketVersion",
"bnam": "bucketName",
"bnum": "bucketNumber",
"nk": "naturalKey",
"ct": "createdTimestamp",
"iid": "instanceId"
}
},
"metadataInstances": [
{
"iid": "41e9a32b-e85f-4a9a-a6a2-a3784855e859",
"bnum": 357,
"bnam": "source",
"bv": 1,
"nk": "mce",
"i": "{\"source\":\"Manufacturing Connect edge\"}",
"ct": "1689781556451"
}
]
}
Recuperare tipi e tag da Config Manager
Di seguito è riportato un esempio di richiesta per ottenere i tag da Config Manager:
GET http://localhost:8080/data/v1/config/tags?includeHeader=true&pageSize=10
Una risposta parziale di esempio è simile alla seguente:
{
"header": {
"tagCount": 10,
"dataFields": {
"types": "types",
"createdTimestamp": "createdTimestamp",
"tagName": "tagName",
"id": "id"
}
},
"tags": [
{
"id": "613db120-fed4-4584-a3b1-9468d7228edb",
"tagName": "MCe-tag-single-string",
"types": ["default-discrete-records"],
"createdTimestamp": "1689781665469"
},
{
"id": "3b42c8c3-3261-4a30-8af8-d2bde1ca72de",
"tagName": "MCe-tag-array-event-3",
"types": ["default-discrete-records"],
"createdTimestamp": "1689781665458"
},
{
"id": "73e198c8-0ffc-4064-bf42-6c60e413c845",
"tagName": "MCe-tag-array-event-2",
"types": ["default-discrete-records"],
"createdTimestamp": "1689781665541"
},
{
"id": "01822a93-f917-4c9c-a1a9-49ba7ee98bff",
"tagName": "MCe-tag-array-event-0",
"types": ["default-discrete-records"],
"createdTimestamp": "1689781665470"
},
{
"id": "7bccbbd2-9e65-4bb5-b0c7-48ab9531712d",
"tagName": "MCe-tag-array-numeric",
"types": ["default-complex-numeric-records"],
"createdTimestamp": "1689781667366"
},
{
"id": "85804705-64a6-494b-a105-c5b8b52ae147",
"tagName": "stampingmachine-09-vibration",
"types": ["default-complex-numeric-records"],
"createdTimestamp": "1689781667445"
},
{
"id": "c33732fb-28b3-43d6-a9ed-8d0c228f1eeb",
"tagName": "primepaintingrobot-01-viscosity",
"types": ["default-numeric-records"],
"createdTimestamp": "1689781669547"
},
{
"id": "50bbb41e-c378-4740-ba9e-0c6f84b44ca7",
"tagName": "MCe-tag-array-event-1",
"types": ["default-discrete-records"],
"createdTimestamp": "1689781665555"
},
{
"id": "39666ff1-738a-4c12-b1d9-370c41ca777f",
"tagName": "MCe-tag-single-event",
"types": ["default-discrete-records"],
"createdTimestamp": "1689781665543"
},
{
"id": "45ea101b-d077-4a91-96d7-aca35b5f20c1",
"tagName": "stampingmachine-09-vibration-1",
"types": ["default-numeric-records"],
"createdTimestamp": "1689781669291"
}
],
"nextPageToken": "LTE4MDA5NTU0MzAuQUFBQUFhRnhTRlYwREFuRnVQcjBBMGx5K1JDVURPdFBtbmN0RW5lUHRGV2o3OE5M"
}
Di seguito è riportato un esempio di richiesta per ottenere i tipi da Config Manager:
GET http://localhost:8080/data/v1/config/types?includeHeader=true&pageSize=5
Una risposta di esempio è simile alla seguente:
{
"header": {
"typeCount": 5,
"dataFields": {
"active": "active",
"typeName": "typeName",
"archetypeName": "archetypeName",
"createdTimestamp": "createdTimestamp",
"id": "id"
}
},
"types": [
{
"typeName": "default-complex-numeric-records",
"archetypeName": "DISCRETE_DATA_SERIES",
"createdTimestamp": "1689781557147",
"id": "4ec777fc-f078-4465-81fd-d70e7a1df329",
"active": true
},
{
"typeName": "default-continuous-records",
"archetypeName": "CONTINUOUS_DATA_SERIES",
"createdTimestamp": "1689781557805",
"id": "d684637a-b751-49d5-82c2-8941aa4c1ef4",
"active": true
},
{
"typeName": "default-clustered-numeric-records",
"archetypeName": "CLUSTERED_NUMERIC_DATA_SERIES",
"createdTimestamp": "1689781557979",
"id": "e2dbbab1-ad15-4445-b0db-59bb17b96a54",
"active": true
},
{
"typeName": "default-numeric-records",
"archetypeName": "NUMERIC_DATA_SERIES",
"createdTimestamp": "1689781556887",
"id": "0f6fc49f-a463-4948-ab65-e4c4f66192b9",
"active": true
},
{
"typeName": "default-discrete-records",
"archetypeName": "DISCRETE_DATA_SERIES",
"createdTimestamp": "1689781557444",
"id": "94327246-5ec3-4777-9154-a968dd546c90",
"active": true
}
],
"nextPageToken": "LTYxMjI4MTg4OC5BQUFBQVVzR25vRVpkMGplSU9FZUc1N2VJY2h0clNqQXhUOUN4QmYxSXZ6UGpjY3U="
}