Daten mithilfe von BCP API (Vorschau) in Ihr Warehouse laden

Gilt für:✅ Warehouse in Microsoft Fabric

Die BCP-API bietet einen direkten clientseitigen Ingestionspfad, um Daten in Warehouse zu laden, ohne Dateien zuvor in einem externen Speicher zwischenzuspeichern.

Important

Dieses Feature befindet sich in der Vorschauphase.

Das BCP-Tool (bcp-Hilfsprogramm), die .NET-SqlBulkCopyKlasse und die Java-SQLServerBulkCopyKlasse sind bewährte Methoden zur Datenaufnahme, die in Workloads von SQL Server, Azure SQL und dedizierten SQL-Pools in Azure Synapse verwendet werden. Diese Schnittstellen verwenden die BCP-API und das TDS-Massenladeprotokoll, was für die Aufnahme großer Datenmengen in der Regel effizienter ist als zeilenweise INSERT-Anweisungen.

Important

Verwenden Sie für den höchsten Aufnahmedurchsatz in Produktionsszenarien, in denen Sie Dateien zuerst stufen können, COPY INTO.

Verwenden Sie die BCP-API, wenn Sich Daten bereits in Ihrer Client- oder Anwendungsebene befinden und Sie eine direkte Aufnahme in Lagertabellen über eine SQL-Verbindung benötigen.

Wann BCP-API verwendet werden soll

Verwenden Sie die BCP-API für Direct-Ingestion-Szenarien, z. B.:

  • Anwendungsdienste, die Daten im Arbeitsspeicher behalten und in Batches schreiben.
  • Betriebsskripte und Runbooks, die Dateien mithilfe von Befehlszeilenautomatisierung laden.
  • Datenintegrationstools, die SQL-Massenkopiesemantik verwenden.
  • Vorhandene Clienttools oder Integrationen, die bereits BCP-API-Semantik verwenden und nicht in ein COPY INTO Stagingmuster umgestaltet werden können.
  • Mikrobatching-Workloads, bei denen Clients häufige kleine Batches direkt über die SQL-Verbindung des Lagerlagers übertragen.

Voraussetzungen

  • Verwenden Sie die Microsoft Entra ID-Authentifizierung. Die SQL-Authentifizierung (Benutzername und Kennwort) wird in Warehouse nicht unterstützt.

Option 1: Verwenden Sie bcp.exe für die skriptbasierte Erfassung

Verwenden Sie das bcp-Hilfsprogramm , wenn Sie eine wiederholbare Befehlszeilenaufnahme von Skripts, geplanten Aufträgen oder Runbooks benötigen. Diese Option eignet sich gut für dateibasierte Importe, bei denen Sie explizite Kontrolle über Trennzeichen, Codierung, Batchgröße und Fehlerausgabe wünschen.

Diese Option wird auch empfohlen, wenn Quelldateien von bcp ... out aus SQL Server, Azure SQL oder ähnlichen SQL-Endpunkten erstellt wurden und Sie kompatible Dateikonventionen für Massenkopien beibehalten möchten.

Typischer Fluss:

  1. Bereiten Sie eine Zieltabelle in Ihrem Lager vor.
  2. Bereiten Sie eine Quelldatei (z. B. CSV) mit Spaltenreihenfolge vor, die dem Ziel entspricht, oder verwenden Sie eine Formatdatei.
  3. Führen Sie bcp ... in mit dem SQL-Endpunkt und der Datenbank Ihres Warehouses aus.
  4. Passen Sie Optionen wie Batchgröße und Trennzeichen anhand von Dateigröße und -format an.

Beispiel:

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

Nützliche Optionen aus der bcp-Dokumentation:

  • -S legt den SQL-Endpunkt oder die Warehouse-Verbindungszeichenfolge fest.
  • -d legt die Zieldatenbank fest.
  • -G verwendet die Microsoft Entra-Authentifizierung. Dies ist die einzige unterstützte Authentifizierungsoption für dieses Vorschauszenario.
  • -UGibt Ihren Microsoft Entra Benutzerprinzipalnamen für interaktive Anmeldemuster an.
  • -c verwendet das Zeichendatenformat.
  • -t legt den Feldterminator fest (, in diesem Beispiel).
  • -b kann die Batchgröße für große Lasten festlegen.

Vollständige Syntax und plattformspezifische Optionen finden Sie unter "Massenkopie mit bcp Utility".

Option 2: Verwenden von C# SqlBulkCopy

Verwenden Sie Microsoft. Data.SqlClient.SqlBulkCopy für .NET Dienste und Anwendungen, die bereits Daten im Arbeitsspeicher enthalten (z. BDataTable. oder DbDataReader). SqlBulkCopy überträgt Zeilen effizient per Stream über eine SQL-Verbindung in eine Zieltabelle. Es ist eine bessere Wahl als das Ausgeben vieler einzelner INSERT Aussagen.

Typischer Fluss:

  1. Öffnen Sie mithilfe der Microsoft Entra-Authentifizierung eine SQL-Verbindung mit der Warehouse-Verbindungszeichenfolge.
  2. Erstellen Sie eine SqlBulkCopy-Instanz und legen Sie DestinationTableName fest.
  3. (Optional) Fügen Sie Spaltenzuordnungen hinzu, wenn quell- und Zielspaltennamen oder -reihenfolge unterschiedlich sind.
  4. Legen Sie leistungsbezogene Eigenschaften wie BatchSize und BulkCopyTimeout fest.
  5. Rufen Sie WriteToServer oder WriteToServerAsync auf, um den Batch zu laden.

Beispiel:

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

Allgemeine Optimierungsoptionen umfassen BatchSize, BulkCopyTimeoutund explizite Spaltenzuordnungen, bei denen sich Quell- und Zielschemas unterscheiden.

Option 3: Verwenden von Java SQLServerBulkCopy

Verwenden Sie SQLServerBulkCopy in Java Diensten, die Daten aus ODBC-Quellen oder In-Memory-Datenströmen aufnehmen. Es bietet ein Massenladeverhalten ähnlich wie bcp.exe, aber direkt im Anwendungscode.

Typischer Fluss:

  1. Öffnen Sie mit der Microsoft Entra-Authentifizierung eine JDBC-Verbindung mit der warehouse-Verbindungszeichenfolge.
  2. Erstellen Sie eine Instanz von SQLServerBulkCopy und legen Sie setDestinationTableName fest.
  3. (Optional) Konfigurieren Sie SQLServerBulkCopyOptions und die Spaltenzuordnungen.
  4. Geben Sie die Quelldaten als ResultSet, RowSetoder ISQLServerBulkRecord.
  5. Rufen Sie writeToServer auf, um Daten zu erfassen.

Beispiel:

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

Die BULK copy-API unterstützt das Schreiben aus ResultSet, RowSetund ISQLServerBulkRecord Quellen.

Hinweise zur Unterstützung der Option zum Massenkopieren

In diesem Abschnitt wird erläutert, wie sich allgemeine Massenkopieoptionen in Fabric Data Warehouse verhalten. Die Optionsnamen entsprechen den Einstellungen in .NET SqlBulkCopyOptions, Java SQLServerBulkCopyOptions und zugehörigen BCP-Hinweisen zum Massenladen.

Nicht zutreffende Optionen

Gängige Client-APIs akzeptieren die folgenden Optionen, aber das Massenkopieren im Fabric Data Warehouse ignoriert sie und verwendet das Standardverhalten des Diensts:

  • CheckConstraints
  • TableLock
  • KeepNulls
  • FireTriggers

Leistungsüberlegungen

Die Leistung von Massenkopien hängt stark von der Batchgröße und der Netzwerkqualität des Clientuploads ab.

Batchgröße

Die Batchgröße wirkt sich erheblich auf den Durchsatz aus. Jeder Batch hat einen festen Verarbeitungsaufwand, sodass das Senden sehr kleiner Batches (z. B. Zehner oder Hunderter Zeilen) die Leistung beim Laden großer Datasets erheblich reduzieren kann.

Verwenden Sie für größere Lasten größere Batches. Ein praktisches Ziel beträgt etwa 150 MB bis 1 GB pro Batch.

Ein guter Ausgangspunkt für viele Workloads beträgt 250 MB bis 500 MB pro Batch, und passen Sie dann basierend auf Durchsatz- und Clientspeichergrenzwerten an.

Qualität der Uploadverbindung des Clients

Massenkopie streamt Daten vom Client an den Warehouse-Endpunkt. Wenn die Uploadbandbreite begrenzt ist oder die Netzwerklatenz hoch ist, kann der Aufnahmedurchsatz auch dann verringert werden, wenn Lagerressourcen verfügbar sind.

Um eine optimale Leistung zu erzielen, führen Sie die Clientanwendung in derselben Azure Region wie das Lager aus, und verwenden Sie einen Netzwerkpfad mit hoher Bandbreite und geringer Latenz.

BCP-API im Vergleich zu COPY INTO

  • Verwenden Sie die BCP-API , wenn Daten auf der Client-/Anwendungsebene generiert oder gespeichert werden und die direkte Aufnahme erforderlich ist.
  • Verwenden Sie COPY INTO, wenn Sie Dateien im Speicher bereitstellen und den primären serverseitigen Pfad für die Erfassung mit dem höchsten Durchsatz nutzen möchten.