Připojení aplikací Fabric k datům Fabric

Konektory poskytují typový přístup z aplikace Fabric k datům v dalších položkách Fabric. Pomocí konektoru se můžete dotazovat na lakehouse, datový sklad, databázi SQL ve službě Fabric nebo sémantický model, aniž byste museli konfigurovat samostatnou datovou službu.

Podporované konektory

Vyberte konektor podle položky Fabric a operací, které vaše aplikace potřebuje:

Textilní položka Typ konektoru Podporované operace
Koncový bod analýzy SQL Lakehouse fabric-sqlanalytics read
warehouse fabric-warehouse read, create, update a delete
SQL databáze v prostředí Fabric fabric-sqldatabase read, create, update a delete
Sémantický model fabric-semanticmodel executeQuery

Pro sklad a SQL databáze v Fabric konektorech konfigurujte pouze ty operace, které vaše aplikace potřebuje. Konektor Lakehouse je pouze pro čtení.

Předpoklady

  • Projekt Fabric Apps vytvořený pomocí npm create @microsoft/rayfin@latest nebo inicializovaný pomocí npx rayfin init.
  • Pracovní prostor Fabric, který obsahuje položku, ke které se chcete připojit.
  • Oprávnění k přístupu k pracovnímu prostoru a zdrojovému předmětu.
  • ID pracovního prostoru a ID položky, které najdete v Fabric URL nebo pomocí příkazu connector search.

Najdi předmět Fabric

Pomocí connector search vypíšete položky určitého typu v pracovním prostoru. Následující příklad uvádí sklady:

npx rayfin connector search --workspace-id <workspace-id> --type fabric-warehouse --json

Nahraďte <workspace-id> ID pracovního prostoru Fabric. Pro vyhledávání jiné podporované položky změňte hodnotu --type . Můžete také přidat filtr jmen:

npx rayfin connector search "sales" --workspace-id <workspace-id> --type fabric-warehouse --json

Zkopírujte ID položky z výsledků vyhledávání.

Přidání konektoru

Spusťte connector add v kořenovém adresáři projektu Fabric Apps. Následující příklad přidává skladový konektor pouze pro čtení s názvem inventory:

npx rayfin connector add --type fabric-warehouse --workspace-id <workspace-id> --item-id <warehouse-item-id> --name inventory --operations read

Použijte odpovídající typ konektoru a operace pro ostatní položky 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

Příkaz:

  • Přidá konektor do sekce nejvyšší úrovně connectors v rayfin/rayfin.yml.
  • Vytvoří konektorové soubory pod .rayfin/connectors/<connector-name>/
  • Vypíše příkaz odpovídající verzi npm install pro požadované balíčky konektorů.

Spusťte přesný instalační příkaz, který vypíše CLI. Tím se balíčky konektorů udržují ve verzi odpovídající vaší verzi Rayfin CLI.

Poznámka:

Objevování schémat je nejlepší pokus. Konektor lze přidat i v případě, že objevování není dokončeno. Pokud CLI zobrazí varování před objevováním, vyřešte ho dříve, než definujete entity z generovaného metadata.json souboru.

Generovaná konfigurace využívá delegovanou autentizaci. Konfigurace skladového a sémantického modelu připomíná následující příklad:

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

Zachovejte hodnotu sémantického modelu version , kterou generuje CLI.

Konfigurace konektoru entit

Lakehouse, warehouse a SQL databázové konektory zpřístupňují vybrané zdrojové tabulky jako typované entity. Použijte vygenerovaný metadata.json soubor k definování pouze tabulek a sloupců, které vaše aplikace potřebuje.

Následující příklad předpokládá, že vybraný sklad obsahuje tabulku dbo.Order s pojmenovaným OrderID celočíselným primárním klíčem a textovým sloupcem jménem customerEmail. Nahraďte tyto ilustrativní názvy a typy hodnotami z generovaných metadat.

Important

Neodvozujte primární klíč z názvu sloupce. Pokud zdrojová tabulka nemá klíč, vynechte primaryKey. Bezklíčové entity nepodporují operace, které by řešily řádek podle klíče.

Vytvořte entitu:

// 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;
}

Poté entitu zaregistrujte v schématu konektoru:

// 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
>;

Udržujte konzistentní název konektoru, vlastnosti schématu a název konfigurace klienta.

Konfigurujte klienta konektorů

Přidejte schémata konektorů do ConnectorsRayfinClient. Konektory sémantických modelů také vyžadují 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(),
  }
);

Použijte API URL a publikovatelný klíč z vašeho projektu Fabric Apps. Zachovejte stávající přihlašovací tok aplikace. Vytvoření klienta nepřihlásí uživatele.

Dotazování propojených dat

Po přihlášení uživatele můžete ke konektoru entity přistupovat pomocí jeho názvu a entity:

const orders = await client.connectors.inventory.Order
  .select(['orderId', 'customerEmail'])
  .first(20)
  .execute();

Vyberte sloupce explicitně a omezte počet vrácených řádků.

Pro sémantický model odešlete dotaz DAX s :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);
}

Nahraďte Sales ji tabulkou ve svém sémantickém modelu. Před použitím výsledku zkontrolujte stav vrácených údajů.

Přístup přes zabezpečený konektor

Používejte tyto ovládací prvky společně:

  • Omezte operace konektoru v rayfin.yml pouze na akce, které aplikace potřebuje.
  • Přidejte @role deklarace ke spojovacím entitám, které určují, kteří přihlášení uživatelé mohou provádět jednotlivé operace.
  • Přidejte řádkové politiky nebo pole, zahrňte a vylučujte pravidla, když uživatelé potřebují přístup pouze k části entity.
  • Nechte zapnuté delegované ověřování, aby požadavky na propojení využívaly přístup přihlášeného uživatele.

Typy TypeScriptů na straně klienta zvyšují bezpečnost vývoje, ale nejsou hranicí autorizace. Vynuťte přístup v konfiguraci konektoru a rolích entit.

Nasazení konektoru

Nasazení aplikace a konfigurace konektoru:

npx rayfin up

Otestujte nasazenou aplikaci s uživatelem, který má očekávaná oprávnění jak na aplikaci Fabric, tak na připojeném zařízení.