Eventstream REST API

Le API REST di Microsoft Fabric consentono di automatizzare procedure e processi dell'infrastruttura, aiutando l'organizzazione a completare le attività in modo più efficiente e accurato. Automatizzando questi flussi di lavoro, è possibile ridurre gli errori, migliorare la produttività e ottenere risparmi sui costi tra le operazioni.

In Infrastruttura un elemento rappresenta un set di funzionalità all'interno di un'esperienza specifica. Ad esempio, Eventstream è un elemento nell'esperienza di intelligence in tempo reale. Ogni elemento in Fabric è definito da una definizione di elemento, ovvero un oggetto che delinea la struttura, il formato e i componenti chiave che costituiscono l'elemento.

Questo articolo offre una guida completa sull'uso delle Microsoft Fabric REST APIs per creare e gestire elementi di Eventstream all'interno del workspace Fabric. Sono disponibili specifiche dettagliate per ogni operazione dell'API Eventstream, insieme alle istruzioni per la configurazione e la configurazione delle chiamate API.

Per una panoramica completa delle API REST di Microsoft Fabric, visitare: Uso delle API REST di Microsoft Fabric

API di Eventstream supportate

Attualmente, Eventstream supporta le API basate su definizioni seguenti:

API Descrizione
Creare un elemento Eventstream con definizione Usare per creare un elemento Eventstream nell'area di lavoro con informazioni dettagliate sulla topologia, tra cui origine, destinazioni, operatori e flussi.
Ottenere la definizione dell'elemento Eventstream Usare per ottenere una definizione di elemento Eventstream con informazioni dettagliate sulla topologia, tra cui origine, destinazioni, operatori e flussi.
Aggiornare la definizione dell'elemento Eventstream Usare per aggiornare o modificare una definizione di elemento Eventstream, tra cui origine, destinazioni, operatori e flussi.

Per gestire gli elementi Eventstream usando operazioni CRUD, vedere Api REST di Infrastruttura - Eventstream. Queste API supportano le operazioni seguenti:

  • Creare flusso di eventi
  • Elimina flusso di eventi
  • Ottieni Eventstream
  • Elencare flussi di eventi
  • Aggiorna Eventstream

Come chiamare l'API Eventstream?

Passaggio 1: Eseguire l'autenticazione a Fabric

Per usare le API di Infrastruttura, è prima necessario ottenere un token Microsoft Entra per il servizio Fabric, quindi usare tale token nell'intestazione di autorizzazione della chiamata API. Sono disponibili due opzioni per acquisire il token Microsoft Entra.

opzione 1: Ottenere il token con MSAL.NET

Se l'applicazione deve accedere alle API di Fabric usando un'entità servizio, è possibile usare la libreria MSAL.NET per acquisire un token di accesso. Seguire la guida introduttiva all'API infrastruttura per creare un'app console C# che acquisisce un token di Azure AD usando la libreria MSAL.Net, quindi usare C# HttpClient per chiamare l'API di elenco delle aree di lavoro.

Opzione 2: Ottenere il token usando il Fabric Portal

È possibile usare il token di Azure AD per autenticare e testare le API di Infrastruttura. Accedi al Fabric Portal per il tenant su cui desideri effettuare il test e premere F12 per accedere alla modalità sviluppatore del browser. Nella console eseguire:

powerBIAccessToken

Copiare il token e incollarlo nell'applicazione.

Annotazioni

Se il flusso di eventi creato include tutte le origini che usano una connessione cloud, assicurarsi che l'identità usata per ottenere il token disponga dell'autorizzazione per accedere a tale connessione cloud, sia che si tratti di un'entità servizio o di un utente.

Passaggio 2: Preparare un corpo EventStream in JSON

Creare un payload JSON che verrà convertito in base64 nella richiesta API. La definizione dell'elemento Eventstream segue una struttura simile a un grafo ed è costituita dai componenti seguenti:

Campo Descrizione
Fonti Origini dati che possono essere inserite in Eventstream per l'elaborazione. Le origini dati supportate includono origini di streaming di Azure, origini di streaming di terze parti, database CDC (change data capture), eventi Archiviazione BLOB di Azure ed eventi di sistema fabric.
Destinazioni Endpoint all'interno di Fabric in cui è possibile instradare i dati elaborati, tra cui Lakehouse, Eventhouse, Activator e altri.
Operatori Processori di eventi che gestiscono flussi di dati in tempo reale, ad esempio Filtro, Aggregazione, Raggruppamento e Join.
Flussi Flussi di dati disponibili per la sottoscrizione e l'analisi nell'hub in tempo reale. Esistono due tipi di flussi: flussi predefiniti e flussi derivati.

Usare i modelli API in GitHub per definire il corpo Eventstream.

È possibile fare riferimento a questo documento di Swagger per informazioni dettagliate su ogni proprietà dell'API e illustra anche la definizione di un payload dell'API Eventstream.

Modalità di inserimento diretto Eventhouse

Quando si usa la modalità di inserimento diretto eventhouse come destinazione nel payload dell'API Eventstream, assicurarsi di fornire le proprietà specifiche di Eventhouse nella definizione di destinazione, ad esempio connectionName e mappingRuleName.

Per la procedura di configurazione completa, incluso come:

  • creare la eventhouse,
  • ottenere le proprietà del database KQL,
  • creare la tabella e la regola di mappatura JSON e
  • creare eventstream in modalità DirectIngestion usando le API,

vedi Creazione di un Eventstream con una destinazione DirectIngestion Eventhouse tramite API.

Per altri dettagli sulla definizione di un elemento Eventstream, consultare la sezione definizione dell'elemento Eventstream.

esempio di definizione eventstream in JSON:

{
  "sources": [
    {
      "name": "SqlServerOnVmDbCdc",
      "type": "SQLServerOnVMDBCDC",
      "properties":
      {
        "dataConnectionId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "tableName": ""
      }
    }
  ],
  "destinations": [
    {
      "name": "Lakehouse",
      "type": "Lakehouse",
      "properties":
      {
        "workspaceId": "bbbb1111-cc22-3333-44dd-555555eeeeee",
        "itemId": "cccc2222-dd33-4444-55ee-666666ffffff",
        "schema": "",
        "deltaTable": "newTable",
        "minimumRows": 100000,
        "maximumDurationInSeconds": 120,
        "inputSerialization":
        {
          "type": "Json",
          "properties":
          {
            "encoding": "UTF8"
          }
        }
      },
      "inputNodes": [{"name": "derivedStream"}]
    }
  ],
  "streams": [
    {
      "name": "myEventstream-stream",
      "type": "DefaultStream",
      "properties":
      {},
      "inputNodes": [{"name": "SqlServerOnVmDbCdc"}]
    },
    {
      "name": "derivedStream",
      "type": "DerivedStream",
      "properties":
      {
        "inputSerialization":
        {
          "type": "Json",
          "properties":
          {
            "encoding": "UTF8"
          }
        }
      },
      "inputNodes": [{"name": "GroupBy"}]
    }
  ],
  "operators": [
    {
      "name": "GroupBy",
      "type": "GroupBy",
      "inputNodes": [{"name": "myEventstream-stream"}],
      "properties":
      {
        "aggregations": [
          {
            "aggregateFunction": "Average",
            "column":
            {
              "expressionType": "ColumnReference",
              "node": null,
              "columnName": "payload",
              "columnPathSegments": [{"field": "ts_ms"}]
            },
            "alias": "AVG_ts_ms"
          }
        ],
        "groupBy": [],
        "window":
        {
          "type": "Tumbling",
          "properties":
          {
            "duration":
            {
              "value": 5,
              "unit": "Minute"
            },
            "offset":
            {
              "value": 1,
              "unit": "Minute"
            }
          }
        }
      }
    }
  ],
  "compatibilityLevel": "1.1"
}

Passaggio 3: Creare una stringa base64 di JSON Eventstream

Usare uno strumento come Codifica e decodifica Base64 per convertire il JSON di Eventstream in una stringa in base64.

Uno screenshot della codifica di Eventstream JSON in una stringa base64.

Passaggio 4: Creare il corpo della richiesta API

Usare il codice JSON Eventstream con codifica Base64 nel passaggio precedente come contenuto per il corpo della richiesta API.

Ecco un esempio di payload con la stringa con codifica Base64:

{
 "definition": {
  "parts": [
   {
    "path": "eventstream.json",
    "payload": "ewogICJzb3VyY2VzIjogWwogICAgewogICAgICAibmFtZSI6ICJTcWxTZXJ2ZXJPblZtRGJDZGMiLAogICAgICAidHlwZSI6ICJTUUxTZXJ2ZXJPblZNREJDREMiLAogICAgICAicHJvcGVydGllcyI6CiAgICAgIHsKICAgICAgICAiZGF0YUNvbm5lY3Rpb25JZCI6ICJhYWFhYWFhYS0wMDAwLTExMTEtMjIyMi1iYmJiYmJiYmJiYmIiLAogICAgICAgICJ0YWJsZU5hbWUiOiAiIgogICAgICB9CiAgICB9CiAgXSwKICAiZGVzdGluYXRpb25zIjogWwogICAgewogICAgICAibmFtZSI6ICJMYWtlaG91c2UiLAogICAgICAidHlwZSI6ICJMYWtlaG91c2UiLAogICAgICAicHJvcGVydGllcyI6CiAgICAgIHsKICAgICAgICAid29ya3NwYWNlSWQiOiAiYmJiYjExMTEtY2MyMi0zMzMzLTQ0ZGQtNTU1NTU1ZWVlZWVlIiwKICAgICAgICAiaXRlbUlkIjogImNjY2MyMjIyLWRkMzMtNDQ0NC01NWVlLTY2NjY2NmZmZmZmZiIsCiAgICAgICAgInNjaGVtYSI6ICIiLAogICAgICAgICJkZWx0YVRhYmxlIjogIm5ld1RhYmxlIiwKICAgICAgICAibWluaW11bVJvd3MiOiAxMDAwMDAsCiAgICAgICAgIm1heGltdW1EdXJhdGlvbkluU2Vjb25kcyI6IDEyMCwKICAgICAgICAiaW5wdXRTZXJpYWxpemF0aW9uIjoKICAgICAgICB7CiAgICAgICAgICAidHlwZSI6ICJKc29uIiwKICAgICAgICAgICJwcm9wZXJ0aWVzIjoKICAgICAgICAgIHsKICAgICAgICAgICAgImVuY29kaW5nIjogIlVURjgiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAiaW5wdXROb2RlcyI6IFt7Im5hbWUiOiAiZGVyaXZlZFN0cmVhbSJ9XQogICAgfQogIF0sCiAgInN0cmVhbXMiOiBbCiAgICB7CiAgICAgICJuYW1lIjogIm15RXZlbnRzdHJlYW0tc3RyZWFtIiwKICAgICAgInR5cGUiOiAiRGVmYXVsdFN0cmVhbSIsCiAgICAgICJwcm9wZXJ0aWVzIjoKICAgICAge30sCiAgICAgICJpbnB1dE5vZGVzIjogW3sibmFtZSI6ICJTcWxTZXJ2ZXJPblZtRGJDZGMifV0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogImRlcml2ZWRTdHJlYW0iLAogICAgICAidHlwZSI6ICJEZXJpdmVkU3RyZWFtIiwKICAgICAgInByb3BlcnRpZXMiOgogICAgICB7CiAgICAgICAgImlucHV0U2VyaWFsaXphdGlvbiI6CiAgICAgICAgewogICAgICAgICAgInR5cGUiOiAiSnNvbiIsCiAgICAgICAgICAicHJvcGVydGllcyI6CiAgICAgICAgICB7CiAgICAgICAgICAgICJlbmNvZGluZyI6ICJVVEY4IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgImlucHV0Tm9kZXMiOiBbeyJuYW1lIjogIkdyb3VwQnkifV0KICAgIH0KICBdLAogICJvcGVyYXRvcnMiOiBbCiAgICB7CiAgICAgICJuYW1lIjogIkdyb3VwQnkiLAogICAgICAidHlwZSI6ICJHcm91cEJ5IiwKICAgICAgImlucHV0Tm9kZXMiOiBbeyJuYW1lIjogIm15RXZlbnRzdHJlYW0tc3RyZWFtIn1dLAogICAgICAicHJvcGVydGllcyI6CiAgICAgIHsKICAgICAgICAiYWdncmVnYXRpb25zIjogWwogICAgICAgICAgewogICAgICAgICAgICAiYWdncmVnYXRlRnVuY3Rpb24iOiAiQXZlcmFnZSIsCiAgICAgICAgICAgICJjb2x1bW4iOgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgImV4cHJlc3Npb25UeXBlIjogIkNvbHVtblJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgIm5vZGUiOiBudWxsLAogICAgICAgICAgICAgICJjb2x1bW5OYW1lIjogInBheWxvYWQiLAogICAgICAgICAgICAgICJjb2x1bW5QYXRoU2VnbWVudHMiOiBbeyJmaWVsZCI6ICJ0c19tcyJ9XQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYWxpYXMiOiAiQVZHX3RzX21zIgogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImdyb3VwQnkiOiBbXSwKICAgICAgICAid2luZG93IjoKICAgICAgICB7CiAgICAgICAgICAidHlwZSI6ICJUdW1ibGluZyIsCiAgICAgICAgICAicHJvcGVydGllcyI6CiAgICAgICAgICB7CiAgICAgICAgICAgICJkdXJhdGlvbiI6CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAidmFsdWUiOiA1LAogICAgICAgICAgICAgICJ1bml0IjogIk1pbnV0ZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9mZnNldCI6CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAidmFsdWUiOiAxLAogICAgICAgICAgICAgICJ1bml0IjogIk1pbnV0ZSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sCiAgImNvbXBhdGliaWxpdHlMZXZlbCI6ICIxLjEiCn0=",
    "payloadType": "InlineBase64"
   },
   {
    "path": ".platform",
    "payload": "ewogICIkc2NoZW1hIjogImh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vanNvbi1zY2hlbWFzL2ZhYnJpYy9naXRJbnRlZ3JhdGlvbi9wbGF0Zm9ybVByb3BlcnRpZXMvMi4wLjAvc2NoZW1hLmpzb24iLAogICJtZXRhZGF0YSI6IHsKICAgICJ0eXBlIjogIkV2ZW50c3RyZWFtIiwKICAgICJkaXNwbGF5TmFtZSI6ICJhbGV4LWVzMSIKICB9LAogICJjb25maWciOiB7CiAgICAidmVyc2lvbiI6ICIyLjAiLAogICAgImxvZ2ljYWxJZCI6ICIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiCiAgfQp9",
    "payloadType": "InlineBase64"
   }
  ]
 }
}

Passaggio 5: Creare un elemento Eventstream usando l'API

Nella tua applicazione, invia una richiesta per creare un elemento Eventstream con la stringa codificata in Base64 nel payload.

Esempio di PowerShell :

$evenstreamAPI = "https://api.fabric.microsoft.com/v1/workspaces/$workspaceId/items" 

## Invoke the API to create the Eventstream
Invoke-RestMethod -Headers $headerParams -Method POST -Uri $evenstreamAPI -Body ($body) -ContentType "application/json"

Definizione dell'elemento Eventstream

La definizione dell'elemento Eventstream ha una struttura simile a un grafo costituita da quattro componenti: origini, destinazioni, operatori e flussi.

Origini

Per definire un'origine Eventstream nel corpo dell'API, assicurarsi che ogni campo e proprietà sia specificato correttamente in base alla tabella.

Campo Tipo Descrizione Requisito Valori consentiti/formato
id Stringa (UUID) Identificatore univoco dell'origine, generato dal sistema. Facoltativo in CREATE, obbligatorio in UPDATE Formato UUID
name Stringa Nome univoco per l'origine, usato per identificarlo all'interno di Eventstream. Richiesto Qualsiasi stringa valida
type Stringa (enumerazione) Specifica il tipo di origine. Deve corrispondere a uno dei valori predefiniti. Richiesto AmazonKinesis, AmazonMSKKafka, ApacheKafka, AzureCosmosDBCDC, AzureBlobStorageEvents, AzureEventHub, AzureIoTHub, AzureSQLDBCDC, AzureSQLMIDBCDC, ConfluentCloud, CustomEndpoint, FabricCapacityUtilizationEvents, GooglePubSub, MySQLCDC, PostgreSQLCDC, SampleData, FabricWorkspaceItemEvents, FabricJobEvents, FabricOneLakeEvents
properties Oggetto Altre impostazioni specifiche del tipo di origine selezionato. Richiesto Esempio per AzureEventHub il tipo: dataConnectionId,consumerGroupName,inputSerialization

Esempio di origine Eventstream nel corpo dell'API:

{
  "sources": [
    {
      "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
      "name": "AzureEventHubSource",
      "type": "AzureEventHub",
      "properties":
      {
        "dataConnectionId": "bbbbbbbb-1111-2222-3333-cccccccccccc",
        "consumerGroupName": "$Default",
        "inputSerialization":
        {
          "type": "Json",
          "properties":
          {
            "encoding": "UTF8"
          }
        }
      }
    }
  ]
}

Annotazioni

L'oggetto di una SampleData sorgente deve includere un type campo che denomini il dataset campione, ad esempio "properties": { "type": "StockMarket" }.properties I valori consentiti includono Bicycles, YellowTaxiStockMarket, e Buses. Un vuoto properties: {} viene rifiutato perché manca la proprietà richiesta type .

Destinazioni

Per definire una destinazione Eventstream nel corpo dell'API, assicurarsi che ogni campo e proprietà sia specificato correttamente in base alla tabella.

Campo Tipo Descrizione Requisito Valori consentiti/formato
id Stringa (UUID) Identificatore univoco della destinazione, generato dal sistema. Facoltativo in CREATE, obbligatorio in UPDATE Formato UUID
name Stringa Nome univoco per la destinazione, usato per identificarlo all'interno di Eventstream. Richiesto Qualsiasi stringa valida
type Stringa (enumerazione) Specifica il tipo di destinazione. Deve corrispondere a uno dei valori predefiniti. Richiesto "Activator", "CustomEndpoint", "Eventhouse""Lakehouse"
properties Oggetto Altre impostazioni specifiche del tipo di destinazione selezionato. Richiesto Esempio per Eventhouse il tipo: "dataIngestionMode", "workspaceId", "itemId", "databaseName"
inputNodes Array Riferimento ai nodi di input per la destinazione, ad esempio il nome eventstream o il nome di un operatore. Richiesto Esempio: eventstream-1

Se utilizzi una destinazione con modalità di inserimento diretto Eventhouse, assicurati che connectionName e mappingRuleName siano specificati correttamente. Per i passaggi di configurazione end-to-end, vedere Creare un flusso di eventi con una destinazione DirectIngestion eventhouse usando le API.

Importante

Una destinazione Eventhouse ha due dataIngestionMode valori, e ogni modalità richiede un diverso insieme di proprietà:

  • ProcessedIngestion (Eventstream gestisce direttamente l'ingestione): databaseName, tableName, inputSerialization, itemId, workspaceId e dataIngestionMode.
  • DirectIngestion (fa riferimento a una connessione dati Kusto preesistente e a una mappatura di ingestione sull'Eventhouse): dataIngestionMode, workspaceId, itemId, connectionName, e mappingRuleName.

Fornire la combinazione sbagliata — ad esempio DirectIngestion con tableName/inputSerialization ma no connectionName/mappingRuleName — viene accettato dall'API ma lascia la destinazione in uno Warning stato che non assume righe e non segnala errori. Verifica che il set di proprietà corrisponda alla modalità selezionata.


Esempio di origine Eventstream nel corpo dell'API:

{
  "destinations": [
    {
      "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
      "name": "EventhouseDestination",
      "type": "Eventhouse",
      "properties":
      {
        "dataIngestionMode": "ProcessedIngestion",
        "workspaceId": "bbbbbbbb-1111-2222-3333-cccccccccccc",
        "itemId": "cccc2222-dd33-4444-55ee-666666ffffff",
        "databaseName": "myeventhouse",
        "tableName": "mytable",
        "inputSerialization":
        {
          "type": "Json",
          "properties":
          {
            "encoding": "UTF8"
          }
        }
      },
      "inputNodes": [{"name": "eventstream-1"}]
    }
  ]
}

Operatori

Per definire un operatore Eventstream nel corpo dell'API, assicurarsi che ogni campo e proprietà sia specificato correttamente in base alla tabella.

Campo Tipo Descrizione Requisito Valori consentiti/formato
name Stringa Nome univoco per l'operatore. Richiesto Qualsiasi stringa valida
type Stringa (enumerazione) Specifica il tipo di operatore. Deve corrispondere a uno dei valori predefiniti. Richiesto "Filter", "Join", "ManageFields", "Aggregate""GroupBy", , "Union""Expand"
properties Oggetto Altre impostazioni specifiche del tipo di operatore selezionato. Richiesto Esempio per Filter il tipo: "conditions"
inputNodes Array Elenco di riferimenti ai nodi di input dell'operatore. Richiesto Esempio: eventstream-1
inputSchemas Array Elenco di riferimenti ai nodi di input dell'operatore. Facoltativo Esempio per Filter il tipo: "schema"

Esempio di operatore Eventstream nel corpo dell'API:

{
  "operators": [
    {
      "name": "FilterName",
      "type": "Filter",
      "inputNodes": [{"name": "eventstream-1"}],
      "properties":
      {
        "conditions": [
          {
            "column":
            {
              "node": "nodeName",
              "columnName": "columnName",
              "columnPath": ["path","to","column"]
            },
            "operator": "Equals",
            "value":
            {
              "dataType": "nvarchar(max)",
              "value": "stringValue"
            }
          }
        ]
      }
    }
  ]
}

Flussi

Per definire un flusso nel corpo dell'API, assicurarsi che ogni campo e proprietà siano specificati correttamente in base alla tabella.

Campo Tipo Descrizione Requisito Valori consentiti/formato
id Stringa (UUID) Identificatore univoco del flusso, generato dal sistema. Facoltativo Formato UUID
name Stringa Nome univoco per il flusso. Richiesto Qualsiasi stringa valida
type Stringa (enumerazione) Specifica il tipo di flusso. Deve corrispondere a uno dei valori predefiniti. Richiesto "DefaultStream", "DerivedStream"
properties Oggetto Altre impostazioni specifiche del tipo di flusso selezionato. Richiesto Esempio per Filter il tipo: "conditions"
inputNodes Array Elenco di riferimenti ai nodi di input del flusso. Facoltativo Esempio: [], "eventstream-1"

Esempio di flusso nel corpo dell'API:

{
  "streams": [
    {
      "name": "myEventstream-stream",
      "type": "DefaultStream",
      "properties":
      {},
      "inputNodes": [{"name": "sourceName"}]
    },
    {
      "name": "DerivedStreamName",
      "type": "DerivedStream",
      "properties":
      {
        "inputSerialization":
        {
          "type": "Json",
          "properties":
          {
            "encoding": "UTF8"
          }
        }
      },
      "inputNodes": [{"name": "FilterName"}]
    }
  ]
}