Mata in data i ditt lager med hjälp av BCP API (förhandsversion)

gäller för:✅ Warehouse i Microsoft Fabric

BCP-API:et tillhandahåller en direkt inmatningssökväg på klientsidan för att läsa in data till Warehouse utan mellanlagringsfiler i extern lagring.

Important

Den här funktionen är i förhandsversion.

BCP-verktyget (bcp-verktyget), klassen .NET SqlBulkCopyoch Java SQLServerBulkCopy är etablerade inmatningsmetoder som används i arbetsbelastningar för SQL Server, Azure SQL och Azure Synapse dedikerade SQL-pooler. Dessa gränssnitt använder BCP API och TDS massinläsningsprotokoll, vilket vanligtvis är effektivare än rad-för-rad-instruktioner INSERT för hög volyminmatning.

Important

Använd COPY INTO för högsta inmatningsgenomströmning i produktionsscenarier där du först kan mellanlagra filer.

Använd BCP API när data redan finns på klient- eller programnivån och du behöver direkt inmatning i lagertabeller via en SQL-anslutning.

När du ska använda BCP API

Använd BCP API för direktinmatningsscenarier, till exempel:

  • Programtjänster som lagrar data i minnet och skriver i batchar.
  • Driftskript och runbooks som läser in filer via kommandoradsautomatisering.
  • Dataintegreringsverktyg som använder SQL masskopieringssemantik.
  • Befintliga klientverktyg eller integreringar som redan använder BCP API-semantik och som inte kan omstruktureras till ett COPY INTO mellanlagringsmönster.
  • Arbetsbelastningar för mikrobatchning där klienter skickar täta små batchar direkt via datalagrets SQL-anslutning.

Prerequisites

  • Använd Microsoft Entra ID-autentisering. SQL-autentisering (användarnamn och lösenord) stöds inte i Warehouse.

Alternativ 1: Använd bcp.exe för skriptbaserad inmatning

Använd bcp-verktyget när du behöver repeterbar kommandoradsinmatning från skript, schemalagda jobb eller runbooks. Det här alternativet passar bra för filbaserade importer där du vill ha explicit kontroll över avgränsare, kodning, batchstorlek och felutdata.

Det här alternativet rekommenderas också när källfiler skapades av bcp ... out från SQL Server, Azure SQL eller liknande SQL-slutpunkter och du vill bevara kompatibla masskopieringsfilkonventioner.

Typiskt flöde:

  1. Förbered en måltabell i ditt lager.
  2. Förbered en källfil (till exempel CSV) med kolumnordning som matchar målet eller använd en formatfil.
  3. Kör bcp ... in med SQL-slutpunkten och databasen för ditt datalager.
  4. Justera alternativ som batchstorlek och avgränsare baserat på filstorlek och format.

Exempel:

bcp dbo.Sales in sales.csv -S <workspace-endpoint> -d <database> -G -U <user@domain.com> -c -t ,

Användbara alternativ från bcp-dokumentationen:

  • -S anger SQL-slutpunkten eller warehousets anslutningssträng.
  • -d anger måldatabasen.
  • -Ganvänder Microsoft Entra autentisering. Det här är det enda autentiseringsalternativet som stöds för det här förhandsversionsscenariot.
  • -U anger ditt användarhuvudnamn i Microsoft Entra för interaktiva inloggningsmönster.
  • -c använder teckendataformat.
  • -t anger fältavgränsaren (, i det här exemplet).
  • -b kan ange batchstorlek för stora belastningar.

Fullständig syntax och plattformsspecifika alternativ finns i Masskopiering med bcp-verktyget.

Alternativ 2: Använd C# SqlBulkCopy

Använd Microsoft. Data.SqlClient.SqlBulkCopy för .NET tjänster och program som redan innehåller data i minnet (till exempel DataTable eller DbDataReader). SqlBulkCopy strömmar rader effektivt till en måltabell över en SQL-anslutning. Det är ett bättre val än att utfärda många enskilda INSERT uttalanden.

Typiskt flöde:

  1. Öppna en SQL-anslutning med anslutningssträngen för datalagret med hjälp av Microsoft Entra-autentisering.
  2. Skapa en SqlBulkCopy instans och ange DestinationTableName.
  3. (Valfritt) Lägg till kolumnmappningar om käll- och målkolumnnamnen eller ordningen skiljer sig åt.
  4. Ange prestandarelaterade egenskaper som BatchSize och BulkCopyTimeout.
  5. Anropa WriteToServer eller WriteToServerAsync för att läsa in batchen.

Exempel:

using Microsoft.Data.SqlClient;

using var connection = new SqlConnection(connectionString);
await connection.OpenAsync();

using var bulk = new SqlBulkCopy(connection);
bulk.DestinationTableName = "dbo.Sales";
await bulk.WriteToServerAsync(dataTable);

Vanliga justeringsalternativ är BatchSize, BulkCopyTimeoutoch explicita kolumnmappningar där käll- och målscheman skiljer sig åt.

Alternativ 3: Använd Java SQLServerBulkCopy

Använd SQLServerBulkCopy i Java tjänster som matar in data från JDBC-källor eller minnesinterna dataströmmar. Det ger massinläsningsbeteende som liknar bcp.exe, men direkt i programkoden.

Typiskt flöde:

  1. Öppna en JDBC-anslutning med anslutningssträngen för warehouse med Microsoft Entra-autentisering.
  2. Skapa en SQLServerBulkCopy instans och ange setDestinationTableName.
  3. (Valfritt) Konfigurera SQLServerBulkCopyOptions och kolumnmappningar.
  4. Ange källdata som ResultSet, RowSeteller ISQLServerBulkRecord.
  5. Anropa writeToServer för att mata in data.

Exempel:

try (SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(connectionString)) {
    bulkCopy.setDestinationTableName("dbo.Sales");
    bulkCopy.writeToServer(resultSet);
}

JDBC-masskopierings-API:et stöder skrivning från ResultSet, RowSetoch ISQLServerBulkRecord källor.

Kommentarer om stöd för masskopieringsalternativ

I det här avsnittet beskrivs hur vanliga alternativ för masskopiering fungerar i Fabric Data Warehouse. Alternativnamnen motsvarar inställningar i .NET SqlBulkCopyOptions, Java SQLServerBulkCopyOptions och relaterade BCP-hintar för massinläsning.

Ej tillämpliga alternativ

Vanliga klient-API:er accepterar följande alternativ, men masskopiering i Fabric Data Warehouse ignorerar dem och använder standardtjänstbeteende:

  • CheckConstraints
  • TableLock
  • KeepNulls
  • FireTriggers

Prestandaöverväganden

Masskopieringsprestanda beror mycket på batchstorlek och nätverkskvalitet för klientuppladdning.

Batchstorlek

Batchstorleken har stor påverkan på genomströmningen. Varje batch har fasta bearbetningskostnader, så att skicka mycket små batchar (till exempel tiotals eller hundratals rader) kan avsevärt minska prestanda vid inläsning av stora datamängder.

Använd större batchar för större belastningar. Ett praktiskt mål är cirka 150 MB till 1 GB per batch.

En bra utgångspunkt för många arbetsbelastningar är 250 MB till 500 MB per batch och justeras sedan baserat på dataflödes- och klientminnesgränser.

Anslutningskvalitet för klientuppladdning

Masskopiering strömmar data från klienten till lagerslutpunkten. Om uppladdningsbandbredden är begränsad eller nätverksfördröjningen är hög kan dataflödet för inmatning minska även när lagerresurser är tillgängliga.

För bästa prestanda kör du klientprogrammet i samma Azure region som lagret och använder en nätverkssökväg med hög bandbredd och låg latens.

BCP API jämfört med COPY INTO

  • Använd BCP API när data genereras eller lagras på klient-/programnivån och direkt inmatning krävs.
  • Använd COPY INTO när du kan lagra filer i lagringsutrymmet och vill använda den primära serversidesvägen för inläsning med högsta genomströmning.