Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Соединители обеспечивают типизированный доступ для приложения Fabric к данным в других элементах Fabric. Используйте коннектор для выполнения запросов к lakehouse, warehouse, базе данных SQL в Fabric или семантической модели без необходимости настраивать отдельную службу данных.
Поддерживаемые соединители
Выберите соединитель, исходя из элемента Fabric и операций, необходимых вашему приложению:
| Предмет из ткани | Тип соединителя | Поддерживаемые операции |
|---|---|---|
| Конечная точка SQL-аналитики для Lakehouse | fabric-sqlanalytics |
read |
| warehouse | fabric-warehouse |
read, create, update и delete |
| База данных SQL в Fabric | fabric-sqldatabase |
read, create, update и delete |
| Семантическая модель | fabric-semanticmodel |
executeQuery |
Для складских и SQL баз данных в Fabric-коннекторах настраивайте только те операции, которые нужны вашему приложению. Коннектор Lakehouse доступен только для чтения.
Необходимые условия
- Проект Fabric Apps, созданный с помощью
npm create @microsoft/rayfin@latestили инициализированный с помощьюnpx rayfin init. - Рабочая область Fabric, содержащая элемент, к которому вы хотите подключиться.
- Разрешение на доступ к рабочему пространству и исходному объекту.
- Идентификатор рабочего пространства и идентификатор элемента, которые можно найти в URL-адресе Fabric или с помощью команды поиска соединителя.
Найдите предмет Fabric
Используйте connector search для размещения элементов определённого типа в рабочем пространстве. В следующем примере перечислены склады:
npx rayfin connector search --workspace-id <workspace-id> --type fabric-warehouse --json
Замените <workspace-id> идентификатором рабочего пространства Fabric. Чтобы найти другой поддерживаемый товар, измените его --type значение. Вы также можете добавить фильтр имени:
npx rayfin connector search "sales" --workspace-id <workspace-id> --type fabric-warehouse --json
Скопируйте идентификатор товара из результата поиска.
Добавление соединителя
Запускайте connector add с корня вашего проекта Fabric Apps. В следующем примере добавлен коннектор хранилища только для чтения с названием inventory:
npx rayfin connector add --type fabric-warehouse --workspace-id <workspace-id> --item-id <warehouse-item-id> --name inventory --operations read
Используйте соответствующий тип разъёма и операции для других элементов 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
Команда:
- Добавляет коннектор в раздел верхнего уровня
connectorsвrayfin/rayfin.yml. - Создаёт файлы коннектора в каталоге
rayfin/connectors/<connector-name>/. - Выводит команду
npm install, версия которой соответствует требуемым пакетам коннекторов.
Запустите точно ту команду установки, которую выводит CLI. Это позволяет поддерживать пакеты коннекторов в соответствии с вашей версией Rayfin CLI.
Замечание
Лучшее усилие — поиск схемы. Коннектор можно добавить, даже если процесс обнаружения не завершён. Если CLI показывает предупреждение о обнаружении, решите его до того, как определите сущности из сгенерированного metadata.json файла.
Сгенерированная конфигурация использует делегированную аутентификацию. Конфигурация складской и семантической модели напоминает следующий пример:
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
Сохраняйте значение семантической модели version , которое генерирует CLI.
Настройте коннектор сущности
Коннекторы Lakehouse, хранилища данных и баз данных SQL предоставляют выбранные исходные таблицы как типизированные сущности. Используйте сгенерированный metadata.json файл, чтобы определить только таблицы и столбцы, которые нужны вашему приложению.
Следующий пример предполагает, что выбранный склад содержит dbo.Order таблицу с целочисленным первичным ключом OrderID и текстовым столбцем с именем customerEmail. Замените эти иллюстративные имена и типы значениями из ваших сгенерированных метаданных.
Important
Не делайте выводы о первичном ключе по названию столбца. Если в исходной таблице нет ключа, опустите primaryKey. Безключевые сущности не поддерживают операции, адресирующие строку за ключом.
Создайте сущность:
// 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;
}
Затем регистрируйте объект в схеме соединителя:
// 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
>;
Сохраняйте имя коннектора, свойство схемы и имя конфигурации клиента неизменными.
Настройте клиент разъёмов
Добавьте схемы разъёмов в ConnectorsRayfinClient. Разъёмы семантических моделей также требуют fabricSemanticModel() времени выполнения:
// 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(),
}
);
Используйте URL API и ключ для публикации из вашего проекта Fabric Apps. Сохраняйте существующий процесс входа в приложение. Создание клиента не выполняет вход пользователя в систему.
Запрос связанных данных
После входа пользователя получите доступ к коннектору сущности через его имя и сущность:
const orders = await client.connectors.inventory.Order
.select(['orderId', 'customerEmail'])
.first(20)
.execute();
Выделите столбцы явно и ограничите количество возвращённых строк.
Для семантической модели отправьте запрос DAX с помощью 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);
}
Замените Sales на таблицу в вашей семантической модели. Проверьте полученный статус перед использованием результата.
Безопасный доступ через разъём
Используйте эти элементы управления вместе:
- Ограничьте работу
rayfin.ymlконнектора действиями, необходимыми приложениям. - Добавьте объявления
@roleк сущностям соединителей, чтобы управлять тем, какие авторизованные пользователи могут выполнять каждую операцию. - Добавьте политики на уровне строк или правила включения и исключения полей, если пользователям нужен доступ только к части сущности.
- Поддерживайте делегированную аутентификацию, чтобы запросы на коннекторы использовали доступ авторизованного пользователя.
Типы TypeScript на стороне клиента повышают безопасность разработки, но они не являются границей авторизации. Настройте управление доступом в конфигурации коннектора и ролях сущностей.
Развертывание соединителя
Разверните приложение и конфигурацию коннектора:
npx rayfin up
Протестируйте развернутое приложение с пользователем, у которого есть ожидаемые права как на Fabric, так и на подключённый элемент.