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.
I connettori forniscono a un'app di Fabric un accesso tipizzato ai dati contenuti in altri elementi di Fabric. Usa un connettore per interrogare un lakehouse, un magazzino, un database SQL in Fabric o un modello semantico senza configurare un servizio dati separato.
Connettori supportati
Scegli un connettore basato sull'elemento Fabric e sulle operazioni di cui la tua app ha bisogno:
| Articolo di tessuto | Tipo di connettore | Operazioni supportate |
|---|---|---|
| Endpoint di analisi SQL per Lakehouse | fabric-sqlanalytics |
read |
| warehouse | fabric-warehouse |
read, create, updatee delete |
| Database SQL nell'ambiente Fabric | fabric-sqldatabase |
read, create, updatee delete |
| Modello semantico | fabric-semanticmodel |
executeQuery |
Per warehouse e database SQL nei connettori Fabric, configura solo le operazioni di cui la tua app ha bisogno. Il connettore lakehouse è di sola lettura.
Prerequisiti
- Progetto app di Fabric creato con
npm create @microsoft/rayfin@latesto inizializzato connpx rayfin init. - Uno spazio di lavoro Fabric che contiene l'oggetto a cui vuoi collegarti.
- Permesso di accedere allo spazio di lavoro e all'oggetto di origine.
- L'ID dello spazio di lavoro e l'ID dell'elemento, che puoi trovare nell'URL di Fabric o tramite il comando di ricerca del connettore.
Trova un elemento di Fabric
Usalo connector search per elencare elementi di un tipo specifico in uno spazio di lavoro. Il seguente esempio elenca i magazzini:
npx rayfin connector search --workspace-id <workspace-id> --type fabric-warehouse --json
Sostituire <workspace-id> con l'ID dell'area di lavoro Fabric. Per cercare un altro oggetto supportato, cambia il --type valore. Puoi anche aggiungere un filtro per il nome:
npx rayfin connector search "sales" --workspace-id <workspace-id> --type fabric-warehouse --json
Copia l'ID dell'articolo dal risultato della ricerca.
Aggiungere un connettore
Avvia connector add dalla radice del tuo progetto Fabric Apps. L'esempio seguente aggiunge un connettore del data warehouse di sola lettura denominato inventory:
npx rayfin connector add --type fabric-warehouse --workspace-id <workspace-id> --item-id <warehouse-item-id> --name inventory --operations read
Usa il tipo di connettore corrispondente e le operazioni per gli altri elementi di Fabric:
# Lakehouse SQL analytics endpoint
npx rayfin connector add --type fabric-sqlanalytics --workspace-id <workspace-id> --item-id <lakehouse-item-id> --name analytics --operations read
# SQL database in Fabric
npx rayfin connector add --type fabric-sqldatabase --workspace-id <workspace-id> --item-id <sql-database-item-id> --name operational --operations read
# Semantic model
npx rayfin connector add --type fabric-semanticmodel --workspace-id <workspace-id> --item-id <semantic-model-item-id> --name salesModel --operations executeQuery
Il comando :
- Aggiunge il connettore alla sezione superiore
connectorsinrayfin/rayfin.yml. - Crea i file di connettore sotto
rayfin/connectors/<connector-name>/. - Stampa un comando
npm installcon versione corrispondente per i pacchetti dei connettori richiesti.
Esegui il comando di installazione esatto stampato dalla CLI. Questo mantiene i pacchetti dei connettori allineati con la versione di Rayfin CLI.
Annotazioni
La scoperta dello schema è il miglior tentativo. Il connettore può essere aggiunto anche se la scoperta non viene completata. Se la CLI mostra un avviso di discovery, risolvilo prima di definire entità dal file generato metadata.json .
La configurazione generata utilizza l'autenticazione delegata. Una configurazione di magazzino e modello semantico somiglia al seguente esempio:
connectors:
- name: inventory
type: fabric-warehouse
config:
workspaceId: "<workspace-id>"
itemId: "<warehouse-item-id>"
auth:
type: delegated
operations:
- name: read
- name: salesModel
type: fabric-semanticmodel
config:
workspaceId: "<workspace-id>"
itemId: "<semantic-model-item-id>"
auth:
type: delegated
version: "1"
operations:
- name: executeQuery
Mantenere il valore semantico del modello version generato dalla CLI.
Configura un connettore di entità
I connettori per lakehouse, data warehouse e database SQL espongono le tabelle di origine selezionate come entità tipizzate. Usa il file generato metadata.json per definire solo le tabelle e le colonne di cui la tua app ha bisogno.
Il seguente esempio assume che il warehouse selezionato contenga una dbo.Order tabella con una chiave primaria intera chiamata OrderID e una colonna di testo denominata customerEmail. Sostituisci questi nomi e tipi illustrativi con valori provenienti dai tuoi metadati generati.
Important
Non dedurre una chiave primaria dal nome di una colonna. Se una tabella sorgente non ha una chiave, ometti primaryKey. Le entità senza chiave non supportano operazioni che individuano una riga tramite chiave.
Crea l'entità:
// rayfin/connectors/inventory/Order.ts
import { entity, int, text, role } from '@microsoft/rayfin-core';
import { Source } from '@microsoft/rayfin-connectors';
@role('authenticated', ['read'])
@entity()
export class Order extends Source({
schema: 'dbo',
table: 'Order',
primaryKey: ['orderId'],
}) {
@int({ column: 'OrderID' }) orderId!: number;
@text() customerEmail!: string;
}
Poi registra l'entità nello schema del connettore:
// rayfin/connectors/inventory/schema.ts
import type { GraphQLBackedConnector } from '@microsoft/rayfin-connector-fabric-graphql';
import type { ConnectorConfig } from '@microsoft/rayfin-connectors';
import { Order } from './Order.js';
export { Order } from './Order.js';
export const connectorConfig = {
connector: 'fabric-warehouse',
operations: ['read'],
entities: { Order },
} as const satisfies ConnectorConfig;
export type InventorySchema = GraphQLBackedConnector<
{ Order: typeof Order },
typeof connectorConfig
>;
Mantieni coerenti il nome del connettore, la proprietà dello schema e il nome della configurazione del client.
Configura il client dei connettori
Aggiungi gli schemi dei connettori a ConnectorsRayfinClient. I connettori per modelli semantici richiedono anche il fabricSemanticModel() runtime:
// src/lib/connectors.ts
import { ConnectorsRayfinClient } from '@microsoft/rayfin-client';
import { fabricSemanticModel } from '@microsoft/rayfin-connector-fabric-semanticmodel';
import {
connectorConfig as inventoryConfig,
type InventorySchema,
} from '../../rayfin/connectors/inventory/schema.js';
import {
connectorConfig as salesModelConfig,
type SalesModelSchema,
} from '../../rayfin/connectors/salesModel/schema.js';
type AppConnectorsSchema = {
inventory: InventorySchema;
salesModel: SalesModelSchema;
};
export const client = new ConnectorsRayfinClient<
Record<string, never>,
Record<string, never>,
AppConnectorsSchema
>(
{
baseUrl: '<app-api-url>',
publishableKey: '<publishable-key>',
authStorage: true,
connectors: {
inventory: inventoryConfig,
salesModel: salesModelConfig,
},
},
{
salesModel: fabricSemanticModel(),
}
);
Usa l'URL API e la chiave pubblicabile dal tuo progetto Fabric Apps. Mantieni il flusso di accesso esistente dell'app. La creazione del client non comporta l'accesso di un utente.
Interroga i dati collegati
Dopo che l'utente ha effettuato l'accesso, accedere a un connettore di entità tramite il nome e l'entità:
const orders = await client.connectors.inventory.Order
.select(['orderId', 'customerEmail'])
.first(20)
.execute();
Seleziona esplicitamente le colonne e limita il numero di righe restituite.
Per un modello semantico, invia una query DAX con executeQuery:
const result = await client.connectors.salesModel.executeQuery({
query: 'EVALUATE TOPN(10, Sales)',
});
if (result.status === 'success') {
console.log(result.table.columns, result.table.rows);
} else {
console.error(result.error.category, result.error.message);
}
Sostituisci Sales con una tabella nel tuo modello semantico. Controlla lo stato restituito prima di utilizzare il risultato.
Accesso sicuro al connettore
Usa questi controlli insieme:
- Limita le operazioni del connettore in
rayfin.ymlalle azioni necessarie all'app. - Aggiungi dichiarazioni
@rolenelle entità del connettore per controllare quali utenti che hanno effettuato l'accesso possono eseguire ciascuna operazione. - Aggiungi criteri a livello di riga o regole di inclusione ed esclusione dei campi quando gli utenti devono accedere solo a una parte di un'entità.
- Mantieni abilitata l'autenticazione delegata così che le richieste di connettore utilizzino l'accesso dell'utente connesso.
I tipi TypeScript lato client migliorano la sicurezza dello sviluppo, ma non rappresentano un limite di autorizzazione. Applicare il controllo di accesso nella configurazione del connettore e nei ruoli dell'entità.
Distribuire il connettore
Distribuisci l'app e la configurazione del connettore:
npx rayfin up
Testa l'app distribuita con un utente che abbia i permessi attesi sia sull'app Fabric che sull'elemento collegato.