Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Conectores fornecem acesso tipado de um aplicativo do Fabric a dados em outros itens do Fabric. Use um conector para consultar um lakehouse, um data warehouse, um banco de dados SQL no Fabric ou um modelo semântico sem configurar um serviço de dados separado.
Conectores suportados
Escolha um conector baseado no item Fabric e nas operações que seu app precisa:
| Item de tecido | Tipo de conector | Operações com suporte |
|---|---|---|
| Ponto de extremidade de análise SQL do lakehouse | fabric-sqlanalytics |
read |
| warehouse | fabric-warehouse |
read, create, updatee delete |
| Banco de dados SQL no Fabric | fabric-sqldatabase |
read, create, updatee delete |
| Modelo semântico | fabric-semanticmodel |
executeQuery |
Para data warehouse e banco de dados SQL nos conectores do Fabric, configure apenas as operações de que seu aplicativo precisa. O conector da casa do lago é somente leitura.
Pré-requisitos
- Um projeto Fabric Apps criado com
npm create @microsoft/rayfin@latestou inicializado comnpx rayfin init. - Um espaço de trabalho Fabric que contém o item ao qual você quer se conectar.
- Permissão para acessar o espaço de trabalho e o item de origem.
- O ID do espaço de trabalho e o ID do item, que você pode encontrar na URL do Fabric ou usando o comando de pesquisa do conector.
Encontre um item do Fabric
Use connector search para listar itens de um tipo específico em um espaço de trabalho. O exemplo a seguir lista armazéns:
npx rayfin connector search --workspace-id <workspace-id> --type fabric-warehouse --json
Substitua <workspace-id> pela ID do espaço de trabalho do Fabric. Para buscar outro item suportado, mude o --type valor. Você também pode adicionar um filtro de nomes:
npx rayfin connector search "sales" --workspace-id <workspace-id> --type fabric-warehouse --json
Copie o ID do item do resultado da busca.
Adicionar um conector
Execute o comando connector add no diretório raiz do seu projeto Fabric Apps. O exemplo a seguir adiciona um conector de armazém somente leitura chamado inventory:
npx rayfin connector add --type fabric-warehouse --workspace-id <workspace-id> --item-id <warehouse-item-id> --name inventory --operations read
Use o tipo de conector correspondente e as operações para outros itens do 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
O comando:
- Adiciona o conector à seção de nível
connectorssuperior emrayfin/rayfin.yml. - Cria os arquivos conectores sob
rayfin/connectors/<connector-name>/. - Exibe um comando
npm installcom versão correspondente para os pacotes de conector necessários.
Execute o comando de instalação exato exibido pela CLI. Isso mantém os pacotes de conectores alinhados com a versão da sua CLI Rayfin.
Note
A descoberta de esquemas é o melhor esforço. O conector pode ser adicionado mesmo que a descoberta não seja concluída. Se a CLI exibir um aviso de descoberta, resolva-o antes de definir entidades a partir do arquivo gerado metadata.json .
A configuração gerada utiliza autenticação delegada. Uma configuração de armazém e modelo semântico se assemelha ao seguinte exemplo:
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
Mantenha o valor do modelo version semântico que a CLI gera.
Configurar um conector de entidade
Conectores Lakehouse, warehouse e banco de dados SQL expõem tabelas de origem selecionadas como entidades tipadas. Use o arquivo gerado metadata.json para definir apenas as tabelas e colunas que seu app precisa.
O exemplo a seguir assume que o warehouse selecionado contém uma dbo.Order tabela com uma chave primária inteira chamada OrderID e uma coluna de texto chamada customerEmail. Substitua esses nomes e tipos ilustrativos por valores dos seus metadados gerados.
Important
Não infira uma chave primária a partir do nome de uma coluna. Se uma tabela de origem não tiver chave, omita primaryKey. Entidades sem chave não suportam operações que endereçam uma linha pela chave.
Crie a entidade:
// 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;
}
Depois, registre a entidade no esquema do conector:
// 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
>;
Mantenha o nome do conector, a propriedade do esquema e o nome da configuração do cliente consistentes.
Configurar o cliente dos conectores
Adicione os esquemas de conectores a ConnectorsRayfinClient. Conectores de modelos semânticos também exigem o ambiente de execução 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(),
}
);
Use a URL da API e a chave publicável do seu projeto Fabric Apps. Mantenha o fluxo de login já existente no app. Criar o cliente não conecta um usuário.
Consultar dados conectados
Depois que o usuário fizer login, acesse um conector de entidade por meio do nome e da entidade:
const orders = await client.connectors.inventory.Order
.select(['orderId', 'customerEmail'])
.first(20)
.execute();
Selecione as colunas explicitamente e limite o número de linhas retornadas.
Para um modelo semântico, envie uma consulta DAX com 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);
}
Substitua Sales por uma tabela no seu modelo semântico. Verifique o status retornado antes de usar o resultado.
Acesso seguro ao conector
Use esses controles juntos:
- Limite, em
rayfin.yml, as operações do conector às ações de que o aplicativo precisa. - Adicionar
@roledeclarações às entidades conectores para controlar quais usuários logados podem realizar cada operação. - Adicione políticas de linha ou regras de inclusão e exclusão de campos quando os usuários precisarem de acesso apenas a uma parte de uma entidade.
- Mantenha a autenticação delegada ativada para que as requisições de conexão usem o acesso do usuário logado.
Tipos TypeScript do lado do cliente melhoram a segurança do desenvolvimento, mas não são um limite de autorização. Aplique o acesso na configuração do conector e nas funções da entidade.
Implantar o conector
Implante o aplicativo e a configuração do conector:
npx rayfin up
Teste o aplicativo implantado com um usuário que tenha as permissões esperadas tanto no app Fabric quanto no item conectado.