Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esto se aplica a:✅ Almacén en Microsoft Fabric
La API de BCP proporciona una vía directa de ingestión desde el cliente para cargar datos en Warehouse sin necesidad de usar archivos provisionales en almacenamiento externo.
Importante
Esta característica se encuentra en versión preliminar.
La herramienta BCP (utilidad bcp), la clase de .NET SqlBulkCopy y la clase de Java SQLServerBulkCopy son métodos consolidados de ingesta utilizados en las cargas de trabajo de SQL Server, Azure SQL y grupos de SQL dedicados de Azure Synapse. Estas interfaces utilizan la API BCP y el protocolo de carga masiva de TDS, que normalmente es más eficiente que las instrucciones fila por fila INSERT para la ingestión de grandes volúmenes.
Importante
Para obtener el mayor rendimiento de ingesta en escenarios de producción en los que puede almacenar provisionalmente los archivos primero, use COPY INTO.
Use la API de BCP cuando los datos ya estén en el nivel de cliente o aplicación y necesite la ingesta directa en tablas de almacenamiento a través de una conexión SQL.
Cuándo usar la API de BCP
Use BCP API para escenarios de ingesta directa, como:
- Servicios de aplicación que mantienen los datos en memoria y escriben en lotes.
- Scripts operativos y runbooks que cargan archivos a través de la automatización de la línea de comandos.
- Herramientas de integración de datos que utilizan la semántica de copia masiva de SQL.
- Herramientas cliente existentes o integraciones que ya utilizan la semántica de la API BCP y que no pueden refactorizarse para seguir un patrón de
COPY INTOstaging. - Cargas de trabajo con procesamiento por microlotes en las que los clientes envían pequeños lotes frecuentes directamente a través de la conexión SQL del almacén de datos.
Prerequisites
- Use la autenticación de Microsoft Entra ID. La autenticación de SQL (nombre de usuario y contraseña) no se admite en Warehouse.
Opción 1: Uso de bcp.exe para la ingesta basada en scripts
Use la utilidad bcp cuando necesite la ingesta de línea de comandos repetible desde scripts, trabajos programados o runbooks. Esta opción es una buena opción para las importaciones basadas en archivos en las que desea un control explícito sobre delimitadores, codificación, tamaño de lote y salida de error.
Esta opción también se recomienda cuando los archivos de origen se crearon bcp ... out a partir de SQL Server, Azure SQL o puntos de conexión SQL similares y desea conservar las convenciones de archivos de copia masiva compatibles.
Flujo típico:
- Prepare una tabla de destino en el almacén.
- Prepare un archivo de origen (por ejemplo CSV) con el orden de columna que coincida con el destino o use un archivo de formato.
- Ejecute
bcp ... incon el extremo SQL de su almacén y su base de datos. - Ajuste las opciones, como el tamaño del lote y los delimitadores en función del tamaño y el formato del archivo.
Ejemplo:
bcp dbo.Sales in sales.csv -S <workspace-endpoint> -d <database> -G -U <user@domain.com> -c -t ,
Opciones útiles de la documentación de bcp:
-
-Sestablece el punto de conexión SQL o la cadena de conexión del almacén. -
-destablece la base de datos de destino. -
-Gusa la autenticación de Microsoft Entra. Esta es la única opción de autenticación admitida para este escenario de versión preliminar. -
-Uespecifica el nombre de usuario principal de Microsoft Entra para los patrones de inicio de sesión interactivo. -
-cusa el formato de datos de caracteres. -
-testablece el terminador de campo (,en este ejemplo). -
-bpuede establecer el tamaño del lote para cargas grandes.
Para obtener una sintaxis completa y opciones específicas de la plataforma, consulte Bulk Copy with bcp Utility (Copia masiva con la utilidad bcp).
Opción 2: Usar SqlBulkCopy de C#
Use Microsoft. Data.SqlClient.SqlBulkCopy para .NET servicios y aplicaciones que ya contienen datos en memoria (por ejemplo, DataTable o DbDataReader).
SqlBulkCopy transmite filas de forma eficaz a una tabla de destino a través de una conexión SQL. Es una opción mejor que emitir muchas declaraciones individuales INSERT .
Flujo típico:
- Abra una conexión SQL con la cadena de conexión del almacén mediante la autenticación de Microsoft Entra.
- Cree una
SqlBulkCopyinstancia y establezcaDestinationTableName. - (Opcional) Añada asignaciones de columnas si los nombres de las columnas de origen y destino o su orden son distintos.
- Establezca propiedades relacionadas con el rendimiento, como
BatchSizeyBulkCopyTimeout. - Llame a
WriteToServero aWriteToServerAsyncpara cargar el lote.
Ejemplo:
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);
Entre las opciones de ajuste habituales se incluyen BatchSize, BulkCopyTimeout y las asignaciones explícitas de columnas cuando los esquemas de origen y de destino difieren.
Opción 3: Usar Java SQLServerBulkCopy
Use SQLServerBulkCopy en servicios de Java que incorporan datos de orígenes JDBC o flujos de datos en memoria. Proporciona un comportamiento de carga masiva similar a bcp.exe, pero directamente en el código de la aplicación.
Flujo típico:
- Abra una conexión JDBC con la cadena de conexión del almacén usando la autenticación de Microsoft Entra.
- Cree una
SQLServerBulkCopyinstancia y establezcasetDestinationTableName. - (Opcional) Configure
SQLServerBulkCopyOptionsy las asignaciones de columnas. - Proporcione los datos de origen como
ResultSet,RowSetoISQLServerBulkRecord. - Llame
writeToServera para ingerir datos.
Ejemplo:
try (SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(connectionString)) {
bulkCopy.setDestinationTableName("dbo.Sales");
bulkCopy.writeToServer(resultSet);
}
La API de copia masiva de JDBC admite la escritura desde los orígenes ResultSet, RowSet y ISQLServerBulkRecord.
Comentarios sobre la compatibilidad con la opción de copia masiva
En esta sección se explica cómo se comportan las opciones comunes de copia masiva en Fabric Data Warehouse. Los nombres de las opciones se corresponden con la configuración de .NET SqlBulkCopyOptions, Java SQLServerBulkCopyOptions y las sugerencias relacionadas de carga masiva de bcp.
Opciones no aplicables
Las API de cliente comunes aceptan las siguientes opciones, pero la copia masiva en Fabric Data Warehouse las omite y usa el comportamiento predeterminado del servicio:
CheckConstraintsTableLockKeepNullsFireTriggers
Consideraciones sobre el rendimiento
El rendimiento de la copia masiva depende en gran medida del tamaño de los lotes y de la calidad de la conexión de red del cliente para la carga.
Tamaño de lote
El tamaño del lote tiene un impacto importante en el rendimiento. Cada lote tiene una sobrecarga de procesamiento fija, por lo que el envío de lotes muy pequeños (por ejemplo, decenas o cientos de filas) puede reducir significativamente el rendimiento al cargar grandes conjuntos de datos.
Para cargas más grandes, use lotes más grandes. Un objetivo práctico se sitúa aproximadamente entre 150 MB y 1 GB por lote.
Un buen punto de partida para muchas cargas de trabajo es de 250 MB a 500 MB por lote y, a continuación, ajuste en función de los límites de rendimiento y memoria del cliente.
Calidad de la conexión de subida del cliente
La copia masiva transmite datos del cliente al extremo del almacén de datos. Si el ancho de banda de subida es limitado o la latencia de red es alta, el rendimiento de ingesta puede disminuir incluso cuando los recursos del almacén de datos están disponibles.
Para obtener el mejor rendimiento, ejecute la aplicación cliente en la misma región de Azure que el almacenamiento y use una ruta de acceso de red de baja latencia y ancho de banda alto.
API de BCP en comparación con COPY INTO
- Use la API de BCP cuando se generan o mantienen datos en el nivel de cliente o aplicación y se requiere la ingesta directa.
- Use
COPY INTOcuando pueda almacenar provisionalmente archivos en el almacenamiento y desee la ruta de acceso del lado servidor principal para la ingesta de mayor rendimiento.
Contenido relacionado
- Ingesta de datos en el almacenamiento
- Ingesta de datos en el almacén mediante la instrucción COPY
- Uso de Bulk Copy API para una ingesta más rápida en Fabric Data Warehouse (blog)
- Copia masiva con la utilidad bcp
- Clase SqlBulkCopy
- Clase SQLServerBulkCopy
- Uso de la copia masiva con el controlador JDBC