Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Cambiare i servizi usando l'elenco a discesa Version .Switch services using the Version drop-down list. Altre informazioni sulla navigazione.
Si applica a: ✅ Esplora dati di Azure in Microsoft Fabric ✅
Riga di stato della risposta HTTP
Se la richiesta ha esito positivo, il codice di stato della risposta HTTP è 200 OK.
Il corpo della risposta HTTP è una matrice JSON, come illustrato di seguito.
Se la richiesta ha esito negativo, il codice di stato della risposta HTTP è un 4xx errore o 5xx .
La frase motivo includerà informazioni aggiuntive sull'errore.
Il corpo della risposta HTTP è un oggetto JSON, come illustrato di seguito.
Annotazioni
La richiesta può restituire un codice di stato di 200 OK, ma il corpo della risposta HTTP indicherà un errore. Questo problema può verificarsi quando l'errore viene generato dopo che la riga di stato HTTP è già stata restituita. È previsto che il lettore verifichi in modo esplicito la presenza di tale condizione.
Intestazioni di risposta HTTP
Indipendentemente dall'esito positivo/negativo della richiesta, con la risposta vengono incluse due intestazioni HTTP personalizzate:
x-ms-client-request-id: il servizio restituisce una stringa opaca che identifica la coppia richiesta/risposta a scopo di correlazione. Se la richiesta includeva un ID richiesta client, il relativo valore verrà visualizzato qui; in caso contrario, viene restituita una stringa casuale.x-ms-activity-id: il servizio restituisce una stringa opaca che identifica in modo univoco la coppia richiesta/risposta a scopo di correlazione. A differenza dix-ms-client-request-id, questo identificatore non è interessato da alcuna informazione nella richiesta ed è univoco per risposta.
Corpo della risposta HTTP (in caso di errore della richiesta)
In caso di errore della richiesta, il corpo della risposta HTTP sarà un documento JSON formattato in base alle OneApiErrors regole. Per una descrizione del OneApiErrors formato, vedere la sezione 7.10.2 qui.
Di seguito è riportato un esempio di errore di questo tipo.
{
"error": {
"code": "General_BadRequest",
"message": "Request is invalid and cannot be executed.",
"@type": "Kusto.Data.Exceptions.KustoBadRequestException",
"@message": "Request is invalid and cannot be processed: Semantic error: SEM0100: 'table' operator: Failed to resolve table expression named 'aaa'",
"@context": {
"timestamp": "2023-04-18T12:59:27.4855445Z",
"serviceAlias": "HELP",
"machineName": "KEngine000000",
"processName": "Kusto.WinSvc.Svc",
"processId": 12580,
"threadId": 10260,
"clientRequestId": "Kusto.Cli;b90f4260-4eac-4574-a27a-3f302db21404",
"activityId": "9dcc4522-7b51-41db-a7ae-7c1bfe0696b2",
"subActivityId": "d0f30c8c-e6c6-45b6-9275-73dd6b379ecf",
"activityType": "DN.FE.ExecuteQuery",
"parentActivityId": "6e3c8dab-0aaf-4df5-85b5-fc20b0b29a84",
"activityStack": "(Activity stack: CRID=Kusto.Cli;b90f4260-4eac-4574-a27a-3f302db21404 ARID=9dcc4522-7b51-41db-a7ae-7c1bfe0696b2 > KD.Query.Client.ExecuteQueryAsKustoDataStream/8191428e-7139-4c5d-9da7-839a0f21c5b9 > P.WCF.Service.ExecuteQueryAsKustoDataStream..IInterNodeCommunicationQueryContract/6e3c8dab-0aaf-4df5-85b5-fc20b0b29a84 > DN.FE.ExecuteQuery/d0f30c8c-e6c6-45b6-9275-73dd6b379ecf)"
},
"@permanent": true,
"@text": "aaa",
"@database": "Samples",
"@ClientRequestLogger": "",
"innererror": {
"code": "SEM0100",
"message": "'table' operator: Failed to resolve table expression named 'aaa'",
"@type": "Kusto.Data.Exceptions.SemanticException",
"@message": "Semantic error: SEM0100: 'table' operator: Failed to resolve table expression named 'aaa'",
"@context": {
"timestamp": "2023-04-18T12:59:27.4855445Z",
"serviceAlias": "HELP",
"machineName": "KEngine000000",
"processName": "Kusto.WinSvc.Svc",
"processId": 12580,
"threadId": 10260,
"clientRequestId": "Kusto.Cli;b90f4260-4eac-4574-a27a-3f302db21404",
"activityId": "9dcc4522-7b51-41db-a7ae-7c1bfe0696b2",
"subActivityId": "d0f30c8c-e6c6-45b6-9275-73dd6b379ecf",
"activityType": "DN.FE.ExecuteQuery",
"parentActivityId": "6e3c8dab-0aaf-4df5-85b5-fc20b0b29a84",
"activityStack": "(Activity stack: CRID=Kusto.Cli;b90f4260-4eac-4574-a27a-3f302db21404 ARID=9dcc4522-7b51-41db-a7ae-7c1bfe0696b2 > KD.Query.Client.ExecuteQueryAsKustoDataStream/8191428e-7139-4c5d-9da7-839a0f21c5b9 > P.WCF.Service.ExecuteQueryAsKustoDataStream..IInterNodeCommunicationQueryContract/6e3c8dab-0aaf-4df5-85b5-fc20b0b29a84 > DN.FE.ExecuteQuery/d0f30c8c-e6c6-45b6-9275-73dd6b379ecf)"
},
"@permanent": true,
"@errorCode": "SEM0100",
"@errorMessage": "'table' operator: Failed to resolve table expression named 'aaa'"
}
}
}
Corpo della risposta HTTP (in caso di esito positivo della richiesta)
In caso di esito positivo della richiesta, il corpo della risposta HTTP sarà una matrice JSON che codifica i risultati della richiesta.
Logicamente, la risposta V2 descrive un oggetto DataSet che contiene un numero qualsiasi di tabelle. Queste tabelle possono rappresentare i dati effettivi richiesti dalla richiesta o informazioni aggiuntive sull'esecuzione della richiesta, ad esempio una contabilità delle risorse utilizzate dalla richiesta. Inoltre, la richiesta effettiva potrebbe effettivamente non riuscire (a causa di varie condizioni) anche se viene restituito uno 200 OK stato e in tal caso la risposta includerà dati di risposta parziali più un'indicazione degli errori.
Fisicamente, la matrice JSON del corpo della risposta è un elenco di oggetti JSON, ognuno dei quali è denominato frame. L'oggetto DataSet viene codificato in due frame: DataSetHeader e DataSetCompletion. Il primo è sempre il primo fotogramma e il secondo è sempre l'ultimo fotogramma. In "between" è possibile trovare i fotogrammi che descrivono gli oggetti Table.
Gli oggetti Table possono essere codificati in due modi:
Come singolo frame: DataTable. Si tratta dell'impostazione predefinita.
In alternativa, come "combinazione" di quattro tipi di frame: TableHeader (che viene prima e descrive la tabella), TableFragment (che descrive i dati di una tabella), TableProgress (facoltativo e fornisce una stima sulla distanza dei dati della tabella) e TableCompletion (che è l'ultimo frame della tabella).
Il secondo caso viene chiamato "modalità progressiva" e viene visualizzato solo se la proprietà results_progressive_enabled della richiesta client è impostata su true.
In questo caso, ogni frame TableFragment descrive un aggiornamento dei dati accumulati da tutti i frame precedenti per la tabella, come operazione di accodamento o come operazione di sostituzione. Quest'ultimo viene usato, ad esempio, quando viene eseguito un calcolo di aggregazione a esecuzione prolungata al "livello superiore" della query, quindi un risultato di aggregazione iniziale viene sostituito da risultati più accurati in un secondo momento.
DataSetHeader
Il DataSetHeader frame è sempre il primo nel set di dati e viene visualizzato esattamente una volta.
{
"Version": string,
"IsProgressive": Boolean
}
Where:
Versionè la versione del protocollo. La versione corrente èv2.0.IsProgressiveè un flag booleano che indica se questo set di dati contiene frame progressivi. Un frame progressivo è uno dei seguenti:Cornice Description TableHeaderContiene informazioni generali sulla tabella TableFragmentContiene una partizione di dati rettangolare della tabella TableProgressContiene lo stato di avanzamento in percentuale (0-100) TableCompletionIndica che questo frame è l'ultimo I frame precedenti descrivono una tabella. Se il
IsProgressiveflag non è impostato su true, ogni tabella del set verrà serializzata usando un singolo frame:DataTable: contiene tutte le informazioni necessarie al client relative a una singola tabella nel set di dati.
TableHeader
Le query eseguite con l'opzione results_progressive_enabled impostata su true possono includere questo frame. Seguendo questa tabella, i client possono prevedere una sequenza di interleaving di TableFragment e TableProgress frame. Il frame finale della tabella è TableCompletion.
{
"TableId": Number,
"TableKind": string,
"TableName": string,
"Columns": Array,
}
Where:
TableIdè l'ID univoco della tabella.TableKindè uno dei seguenti:- PrimaryResult
- QueryCompletionInformation
- QueryTraceLog
- QueryPerfLog
- TableOfContents
- Proprietà query
- QueryPlan
- Sconosciuto
TableNameè il nome della tabella.Columnsè una matrice che descrive lo schema della tabella.
{
"ColumnName": string,
"ColumnType": string,
}
I tipi di colonna supportati sono descritti qui.
TableFragment
La TableFragment cornice contiene un frammento di dati rettangolare della tabella. Oltre ai dati effettivi, questo frame contiene anche una TableFragmentType proprietà che indica al client cosa fare con il frammento. Frammento accodato a frammenti esistenti o sostituirli.
{
"TableId": Number,
"FieldCount": Number,
"TableFragmentType": string,
"Rows": Array
}
Where:
TableIdè l'ID univoco della tabella.FieldCountè il numero di colonne nella tabella.TableFragmentTypedescrive le operazioni che il client deve eseguire con questo frammento.TableFragmentTypeè uno dei seguenti:- DataAppend
- DataReplace
Rowsè una matrice bidimensionale che contiene i dati del frammento.
TableProgress
Il TableProgress fotogramma può interleaversi con la TableFragment cornice descritta in precedenza.
L'unico scopo è notificare al client lo stato di avanzamento della query.
{
"TableId": Number,
"TableProgress": Number,
}
Where:
-
TableIdè l'ID univoco della tabella. -
TableProgressè lo stato di avanzamento in percentuale (0-100).
TableCompletion
La TableCompletion cornice contrassegna la fine della trasmissione della tabella. Non verranno inviati altri frame correlati a tale tabella.
{
"TableId": Number,
"RowCount": Number,
}
Where:
-
TableIdè l'ID univoco della tabella. -
RowCountè il numero totale di righe nella tabella.
DataTable
Le query eseguite con il EnableProgressiveQuery flag impostato su false non includeranno alcun frame (TableHeader, TableFragment, TableProgresse TableCompletion). Ogni tabella del set di dati verrà invece trasmessa usando il DataTable frame che contiene tutte le informazioni necessarie al client per leggere la tabella.
{
"TableId": Number,
"TableKind": string,
"TableName": string,
"Columns": Array,
"Rows": Array,
}
Where:
TableIdè l'ID univoco della tabella.TableKindè uno dei seguenti:- PrimaryResult
- QueryCompletionInformation
- QueryTraceLog
- QueryPerfLog
- Proprietà query
- QueryPlan
- Sconosciuto
TableNameè il nome della tabella.Columnsè una matrice che descrive lo schema della tabella e include:
{
"ColumnName": string,
"ColumnType": string,
}
-
Rowsè una matrice bidimensionale che contiene i dati della tabella.
Significato delle tabelle nella risposta
-
PrimaryResult- Risultato tabulare principale della query. Per ogni istruzione di espressione tabulare, vengono generate una o più tabelle in ordine, che rappresentano i risultati generati dall'istruzione . Possono essere presenti più tabelle a causa di batch e operatori fork. -
QueryCompletionInformation- Fornisce informazioni aggiuntive sull'esecuzione della query stessa, ad esempio se è stata completata correttamente o meno, e sulle risorse utilizzate dalla query (analogamente alla tabella QueryStatus nella risposta v1). -
QueryProperties- Fornisce valori aggiuntivi, ad esempio le istruzioni di visualizzazione client (generate, ad esempio, per riflettere le informazioni nell'operatore di rendering) e le informazioni sul cursore del database . -
QueryTraceLog- Informazioni sul log di traccia delle prestazioni (restituite quandoperftracenelle proprietà della richiesta client è impostato su true).
DataSetCompletion
Il DataSetCompletion frame è l'ultimo nel set di dati.
{
"HasErrors": Boolean,
"Cancelled": Boolean,
"OneApiErrors": Array,
}
Where:
-
HasErrorsè true se si sono verificati errori durante la generazione del set di dati. -
Cancelledè true se la richiesta che ha portato alla generazione del set di dati è stata annullata prima del completamento. -
OneApiErrorsviene restituito solo seHasErrorsè true. Per una descrizione delOneApiErrorsformato, vedere la sezione 7.10.2 qui.