> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Fabric as a data source

> Bring data from Microsoft Fabric Lakehouses and Warehouses to Nekt.

Microsoft Fabric is Microsoft's unified analytics platform, combining data engineering, warehousing and business intelligence on top of OneLake. Nekt reads from Fabric through the **SQL analytics endpoint** that every Lakehouse and Warehouse exposes, so any table or view you can query in Fabric can be brought into your Catalog — along with custom SQL queries of your own.

## Before you start

Microsoft Fabric accepts **Microsoft Entra ID authentication only** — there is no SQL username and password. The recommended setup for scheduled syncs is a **service principal**, which is an application identity in your own Microsoft Entra tenant. Nekt does not register an application on your behalf, so the three steps below all happen inside your organization.

<Steps>
  <Step title="Register an application in Microsoft Entra">
    In the [Azure portal](https://portal.azure.com), go to **Microsoft Entra ID → App registrations → New registration**. Give it a name such as "Nekt connector" and register it.

    From the app's **Overview** page, copy the **Directory (tenant) ID** and the **Application (client) ID**. Then go to **Certificates & secrets → New client secret**, create one, and copy its **Value** immediately — it is only shown once.

    <Warning>Client secrets expire. Note the expiry date you chose: when the secret expires, the source stops extracting until you create a new one and update it in Nekt.</Warning>
  </Step>

  <Step title="Allow service principals to use the Fabric API">
    A **Fabric administrator** must enable the tenant setting **"Service principals can use Fabric APIs"** in the [Fabric admin portal](https://app.fabric.microsoft.com/admin-portal), under **Tenant settings → Developer settings**.

    If your organization restricts that setting to a security group, the application registered in step 1 must be added to that group.

    <Note>
      This step is not optional, and skipping it produces confusing symptoms. Microsoft Fabric issues the service principal a security token through its API, not through the SQL connection. Without that token, queries can fail with "permission denied" or "file not found" errors even though the workspace access is configured correctly.
    </Note>
  </Step>

  <Step title="Give the application access to the workspace">
    In Fabric, open the workspace holding your Lakehouse or Warehouse, select **Manage access → Add people or groups**, and add the application registered in step 1.

    The **Viewer** role is enough for Nekt to read data. You can also share a single Warehouse with the application through item permissions instead of granting workspace-wide access.
  </Step>

  <Step title="Copy the SQL connection string">
    Open your Lakehouse or Warehouse in Fabric, go to **Settings → SQL analytics endpoint** (or **SQL endpoint** for a Warehouse) and copy the **SQL connection string**. It looks like `abcd1234efgh.datawarehouse.fabric.microsoft.com`.

    Note the name of the Lakehouse or Warehouse as well — that is the Database value Nekt asks for.
  </Step>
</Steps>

If your tenant restricts inbound public access to Fabric, you may also need to allow Nekt's public IP. See [this guide](/sources/pre-work-db-connection) for where to find it.

## 1. Add account access

1. In the [Sources](https://app.nekt.ai/sources) tab, click the "Add source" button at the top right of your screen, then select **Microsoft Fabric** from the list of connectors.

2. Click **Next** and fill in the connection settings:

   * **SQL connection string**: the value copied in step 4 above.
   * **Database**: the name of the Lakehouse or Warehouse to read from.
   * **Authentication method**: leave it as **Service principal**.
   * **Tenant ID**, **Client ID** and **Client Secret**: the values from your app registration.

3. Click **Next**.

<Accordion title="Alternative: authenticating as a user instead of a service principal">
  If your organization cannot approve a service principal, set **Authentication method** to **Microsoft Entra user and password** and provide the user principal name and password of a Microsoft Entra account that has access to the workspace.

  Multi-factor authentication must be disabled for that account, and the sync will break whenever the password changes — so this is a fallback, not the recommended setup.
</Accordion>

<Accordion title="Advanced Configuration: Filtering schemas and tables">
  If the Lakehouse or Warehouse contains a large number of tables, you can narrow discovery down with two optional settings.

  **Filter schemas** takes a comma-separated list of schema names:

  ```json theme={null}
  "dbo, sales"
  ```

  Naming a schema explicitly also brings back schemas Nekt hides by default, such as Fabric's own `queryinsights`.

  **Filter tables** takes a comma-separated list with the following patterns:

  * `schema.table` — match a specific table in a specific schema
  * `table` — match a table with this name in any schema
  * Wildcard patterns using `*` (any sequence) and `?` (a single character)

  Examples:

  ```json theme={null}
  "dbo.customers, dbo.orders, products"
  ```

  ```json theme={null}
  "fact_*, dbo.dim_*, temp_????"
  ```

  If neither setting is filled in, every table and view in the endpoint is available.
</Accordion>

<Accordion title="Advanced Configuration: Custom SQL query streams">
  Fabric is a warehouse, so the data you want is often a join or an aggregate rather than a raw table. **Query Streams** lets you define SQL that runs inside Fabric and arrives in Nekt as its own table — which also moves far less data than extracting the underlying tables and rebuilding the result afterwards.

  Each entry needs a **Stream Name** (lowercase letters, digits and underscores, starting with a letter) and the **SQL Query** itself.

  Enable **Query streams only** if you want the source to sync nothing but these queries, skipping table and view discovery entirely.
</Accordion>

### 2. Select streams

Choose which data streams you want to sync — you can select all streams or pick specific ones that matter most to you. We recommend selecting only the tables that are useful to you. You can add new tables at any time after the source is created.

> Tip: The stream can be found more easily by typing its name.

Select the streams and click **Next**.

### 3. Configure data streams

Customize how you want your data to appear in your catalog. Select a name for each table (which will contain the fetched data) and the type of sync.

* **Table name**: we suggest a name, but feel free to customize it. You have the option to add a **prefix** and make this process faster!

* **Sync Type**: you can choose between INCREMENTAL and FULL\_TABLE.
  * Incremental: every time the extraction happens, we'll get only the new data - which is good if, for example, you want to keep every record ever fetched.
  * Full table: every time the extraction happens, we'll get the current state of the data - which is good if, for example, you don't want to have deleted data in your catalog.

<Note>
  **Most Fabric tables arrive without a primary key**, and this is expected rather than a problem. A Lakehouse SQL analytics endpoint carries no key metadata at all, and a Warehouse only reports keys that were added explicitly — Fabric never enforces them, so even a declared key can contain duplicates.

  That means you will usually pick the key columns and the incremental column yourself on this screen. If a table has no reliable column to track changes by, choose FULL\_TABLE.
</Note>

Once you are done configuring, click **Next**.

### 4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters.

To define your [Trigger](https://docs.nekt.com/runs/scheduling-and-triggers), consider how often you want data to be extracted from this source. Bear in mind that each sync consumes Fabric capacity units, so a schedule matched to how often the data actually changes keeps your Fabric costs down.

Optionally, you can determine when to execute a [full sync](https://docs.nekt.com/get-started/core-concepts/types-of-sync#additional-full-sync). This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.

<Warning>For you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you need at least one successful source run.</Warning>

## Good to know

* **Timestamps have no time zone.** A Fabric Warehouse cannot store `datetimeoffset`, and a Lakehouse endpoint maps Delta `TIMESTAMP` values to `datetime2`. Timestamps arrive exactly as they are stored in Fabric, with no offset applied.
* **Fabric supports a narrower set of data types** than SQL Server does. Columns of types Fabric cannot persist — such as `money`, `datetime`, `nvarchar` or `json` — only appear through views or query streams, and are read as their closest equivalent.
* **Binary columns** (`varbinary`) are delivered base64-encoded, and `uniqueidentifier` columns as text.
* **Both Lakehouses and Warehouses work.** A Lakehouse SQL analytics endpoint is read-only by nature, which is all Nekt needs.

## Skills for agents

<Snippet file="agent-skills-intro.mdx" />

<Card title="Download Microsoft Fabric skills file" icon="wand-magic-sparkles" href="/sources/microsoft-fabric.md">
  Microsoft Fabric connector documentation as plain markdown, for use in AI agent contexts.
</Card>
