Configuración de SQL Server en una actividad de copia
En este artículo se describe cómo usar la actividad de copia en la canalización de datos para copiar datos desde y hacia un servidor SQL.
Configuración admitida
Para la configuración de cada pestaña en la actividad de copia, vaya a las secciones siguientes respectivamente.
General
Consulte las instruccionesgenerales para configurar la pestaña de parámetros General.
Source
Las siguientes propiedades son compatibles con un servidor SQL en la pestaña Origen de una actividad de copia.
Se requieren las siguientes propiedades:
Tipo de almacén de datos: seleccione Externo.
Conexión: Seleccione una conexión de servidor SQL en la lista de conexiones. Si la conexión no existe, cree una nueva conexión de servidor SQL seleccionando Nuevo.
Tipo de conexión: seleccione servidor SQL.
Usar consulta: especifique la forma utilizada para leer los datos. Puede elegir Tabla, Consultao procedimiento almacenado. La siguiente lista describe la configuración de cada opción:
Tabla: lee los datos de la tabla especificada. Seleccione el nombre de la entidad en la lista desplegable o seleccione Editar para escribirlo manualmente.
Consulta: especifique la consulta SQL personalizada para leer los datos. Un ejemplo es
select * from MyTable
. O seleccione el icono del lápiz para editar en el editor de código.Procedimiento almacenado: use el procedimiento almacenado que lee los datos de la tabla de origen. La última instrucción SQL debe ser una instrucción SELECT del procedimiento almacenado.
Nombre del procedimiento almacenado: seleccione el procedimiento almacenado o especifique manualmente el nombre del procedimiento almacenado al activar la casilla Editar para leer datos de la tabla de origen.
Parámetros de procedimiento almacenado: especifique valores para los parámetros de procedimiento almacenado. Los valores permitidos son pares de nombre o valor. Los nombres y las mayúsculas y minúsculas de los parámetros tienen que coincidir con las mismas características de los parámetros de procedimiento almacenado. Puede seleccionar Importar parámetros para obtener los parámetros del procedimiento almacenado.
En Avanzado, puede especificar los campos siguientes:
Tiempo de espera de consulta (minutos): especifique el tiempo de espera para la ejecución del comando de consulta; el valor predeterminado es de 120 minutos. Si se establece un parámetro para esta propiedad, los valores permitidos son intervalos de tiempo, como "02:00:00" (120 minutos).
Nivel de aislamiento: especifica el comportamiento de bloqueo de transacciones para el origen de SQL. Los valores permitidos son: Ninguno, Lectura confirmada, Lectura no confirmada, Lectura repetible, Serializable o Captura de pantalla. Si no se especifica, se utiliza el nivel de aislamiento predeterminado de la base de datos. Consulte IsolationLevel Enum para obtener más detalles.
Opción de partición: especifique las opciones de creación de particiones de datos que se usan para cargar datos desde el servidor SQL. Los valores permitidos son: Ninguno (predeterminado), Particiones físicas de la tabla, y Rango dinámico. Cuando se habilita una opción de partición (es decir, no Ninguno), el grado de paralelismo para cargar datos simultáneamente desde un servidor SQL se controla mediante la pestaña Grado de paralelismo de copia en la pestaña Configuración de la actividad de copia.
Ninguno: elija esta opción de configuración para no usar una partición.
Particiones físicas de la tabla: al usar una partición física, la columna de partición y el mecanismo se determinan automáticamente en función de la definición de tabla física.
Intervalo dinámico: cuando se usa la consulta con la opción paralela habilitada, se necesita el parámetro de partición de intervalo(
?DfDynamicRangePartitionCondition
). Consulta de ejemplo:SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
.Nombre de la columna de origen: especifique el nombre de la columna de origen de tipo entero o fecha/hora (
int
,smallint
,bigint
,date
,smalldatetime
,datetime
,datetime2
odatetimeoffset
) que usa la partición de rangos para la copia paralela. Si no se especifica, el índice o la clave primaria de la tabla se detectan automáticamente y se usan como columna de partición.Si usa una consulta para recuperar datos de origen, enlace
?DfDynamicRangePartitionCondition
en la cláusula WHERE. Para obtener un ejemplo, vea la sección Copia en paralelo desde una base de datos SQL.Límite superior de la partición: especifique el valor máximo de la columna de partición para la división del rango de partición. Este valor se usa para decidir el intervalo de particiones, no para filtrar las filas de la tabla. Se crean particiones de todas las filas de la tabla o el resultado de la consulta y se copian. Si no se especifica, la actividad de copia detecta automáticamente el valor. Para obtener un ejemplo, vea la sección Copia en paralelo desde una base de datos SQL.
Límite inferior de la partición: especifique el valor mínimo de la columna de partición para la división del rango de partición. Este valor se usa para decidir el intervalo de particiones, no para filtrar las filas de la tabla. Se crean particiones de todas las filas de la tabla o el resultado de la consulta y se copian. Si no se especifica, la actividad de copia detecta automáticamente el valor. Para obtener un ejemplo, vea la sección Copia en paralelo desde una base de datos SQL.
Columnas adicionales: añada columnas de datos adicionales para almacenar la ruta relativa o el valor estático de los archivos de origen. La expresión se admite para este último.
Tenga en cuenta los siguientes puntos:
- Si se especifica Consulta para el origen, la actividad de copia ejecuta esta consulta en el origen de SQL Server para obtener los datos. También puede especificar un procedimiento almacenado especificando el nombre del procedimiento almacenado y los parámetros de procedimiento almacenado si el procedimiento almacenado toma parámetros.
- Al usar el procedimiento almacenado del origen para recuperar datos, tenga en cuenta que, si está diseñado para devolver otro esquema cuando se pasa un valor de parámetro diferente, es posible que encuentre un error o vea un resultado inesperado al importar el esquema desde la interfaz de usuario, o bien al copiar datos en la base de datos SQL con la creación automática de tablas.
Destination
Las siguientes propiedades son compatibles con el servidor SQL en la pestaña de Destino de una actividad de copia.
Se requieren las siguientes propiedades:
Tipo de almacén de datos: seleccione Externo.
Conexión: seleccione una conexión de SQL Server en la lista de conexiones. Si la conexión no existe, cree una nueva conexión de servidor SQL seleccionando Nuevo.
Tipo de conexión: seleccione servidor SQL.
Opción Tabla: puede elegir Usar existentes para usar la tabla especificada. O bien, elija Crear tabla automáticamente para crear automáticamente una tabla de destino si no existe en el esquema de origen; y tenga en cuenta que esta selección no se admite cuando se usa el procedimiento almacenado como comportamiento de escritura.
Si selecciona Usar existente:
- Tabla: seleccione la tabla de la base de datos en la lista desplegable. O bien, active Editar para escribir el nombre de la tabla manualmente.
Si selecciona: Crear tabla automáticamente:
- Tabla: especifique el nombre de la tabla de destino creada automáticamente.
En Avanzado, puede especificar los campos siguientes:
Comportamiento de escritura: define el comportamiento de escritura cuando el origen son archivos de un almacén de datos basado en archivos. Puede elegir Insertar, Upsert o Procedimiento almacenado.
Insertar: elija esta opción para usar el comportamiento de escritura de inserción para cargar datos en un servidor SQL.
Upsert: elija esta opción use el comportamiento de escritura upsert para cargar datos en un servidor SQL.
Use TempDB: especifique si se debe usar una tabla temporal global o una tabla física como tabla intermedia para upsert. De forma predeterminada, el servicio usa la tabla temporal global como tabla provisional y esta casilla está activada.
Seleccionar esquema de BD de usuario: si la casilla Usar TempDB no está seleccionada, especifique el esquema provisional para crear una tabla provisional si se usa una tabla física.
Nota:
Debe tener el permiso para crear y eliminar tablas. De manera predeterminada, una tabla provisional compartirá el mismo esquema que una tabla de destino.
Columnas clave: especifique los nombres de las columnas para la identificación única de las filas. Se puede usar una sola clave o una serie de claves. Si no se especifica, se usa la clave principal.
Procedimiento almacenado: use el procedimiento almacenado que define cómo aplicar los datos de origen en una tabla de destino. Este procedimiento almacenado se invoca por lote. Para las operaciones que se ejecutan solo una vez y no tienen nada que ver con los datos de origen, por ejemplo, eliminar o truncar, use la propiedad script de copia previa.
Nombre del procedimiento almacenado: seleccione el procedimiento almacenado o especifique manualmente el nombre del procedimiento almacenado al activar la casilla Editar para leer datos de la tabla de origen.
Parámetros de procedimiento almacenado:
- Tipo de tabla: especifique el nombre del tipo de tabla que se usará en el procedimiento almacenado. La actividad de copia permite que los datos que se mueven estén disponibles en una tabla temporal con este tipo de tabla. El código de procedimiento almacenado puede combinar los datos copiados con datos existentes.
- Nombre de parámetro de tipo de tabla: especifique el nombre del parámetro del tipo de tabla especificado en el procedimiento almacenado.
- Parámetros: especifique valores para los parámetros del procedimiento almacenado. Los valores permitidos son pares de nombre o valor. Los nombres y las mayúsculas y minúsculas de los parámetros tienen que coincidir con las mismas características de los parámetros de procedimiento almacenado. Puede seleccionar Importar parámetros para obtener los parámetros del procedimiento almacenado.
Bloquear tabla de inserción masiva: elija Sí o No (predeterminado). Use esta configuración para mejorar el rendimiento de la copia durante una operación de inserción masiva en una tabla sin índice de varios clientes. Puede especificar esta propiedad al seleccionar Insertar o Upsert como comportamiento de escritura. Para más información, vea BULK INSERT (Transact-SQL).
Script de copia previa: especifique un script para que la actividad de copia se ejecute antes de escribir datos en una tabla de destino en cada ejecución. Puede usar esta propiedad para limpiar los datos cargados previamente.
Tiempo de espera de escritura por lotes: especifique el tiempo que se concede a la operación de inserción por lotes para que finalice antes de que se agote el tiempo de espera. El valor permitido es timespan. Si no se especifica ningún valor, el valor predeterminado es "02:00:00".
Tamaño del lote de escritura: especifique el número de filas a insertar en la tabla SQL por lote. El valor que se permite es un entero (número de filas). De manera predeterminada, el servicio determina dinámicamente el tamaño adecuado del lote en función del tamaño de fila.
Máximo de conexiones simultáneas: límite superior de conexiones simultáneas establecidas con el almacén de datos durante la ejecución de la actividad. Especifique un valor solo cuando quiera limitar las conexiones simultáneas.
Asignación
Para la configuración de la pestaña Asignación, si no aplica SQL server con auto crear tabla como destino, vaya a Asignación.
Si aplica SQL Server con auto crear tabla como su destino, excepto la configuración en Asignación, puede editar el tipo para sus columnas de destino. Después de seleccionar Importar esquemas, puede especificar el tipo de columna en el destino.
Por ejemplo, el tipo de la columna ID de origen es int y puede cambiarlo a tipo float al asignarlo a la columna de destino.
Configuración
Para la configuración de la pestañaConfiguración, vaya a Configurar los otros parámetros en la ficha Configuración .
Copia en paralelo desde una base de datos SQL
En la actividad de copia, el conector de SQL Server proporciona creación de particiones de datos integrada para copiar los datos en paralelo. Puede encontrar las opciones de creación de particiones de datos en la pestaña Origen de la actividad de copia.
Al habilitar la copia con particiones, la actividad de copia ejecuta consultas en paralelo en el origen de SQL Server para cargar los datos por particiones. El grado paralelo se controla mediante el grado de paralelismo de copia en la pestaña configuración de la actividad de copia. Por ejemplo, si establece grado de paralelismo de copia en cuatro, el servicio genera y ejecuta simultáneamente cuatro consultas basadas en la configuración y la opción de partición especificadas, y cada consulta recupera una parte de los datos de SQL Server.
Se sugiere habilitar la copia en paralelo con la creación de particiones de datos, especialmente si se cargan grandes cantidades de datos de SQL Server. Estas son algunas configuraciones sugeridas para diferentes escenarios. Cuando se copian datos en un almacén de datos basado en archivos, se recomienda escribirlos en una carpeta como varios archivos (solo especifique el nombre de la carpeta), en cuyo caso el rendimiento es mejor que escribirlos en un único archivo.
Escenario | Configuración sugerida |
---|---|
Carga completa de una tabla grande con particiones físicas. | Opción de partición: particiones físicas de la tabla. Durante la ejecución, el servicio detecta automáticamente las particiones físicas y copia los datos por particiones. Para comprobar si la tabla tiene una partición física o no, puede hacer referencia a esta consulta. |
Carga completa de una tabla grande, sin particiones físicas, aunque con una columna de tipo entero o datetime para la creación de particiones de datos. | Opciones de partición: partición por rangos dinámica. Columna de partición (opcional): especifique la columna usada para crear la partición de datos. Si no se especifica, se usa la columna de clave principal. Límite de partición superior y límite de partición inferior (opcional): especifique si quiere determinar el intervalo de la partición. No es para filtrar las filas de la tabla, se crean particiones de todas las filas de la tabla y se copian. Si no se especifica, la actividad de copia detecta automáticamente los valores y puede tardar mucho tiempo en función de los valores MIN y MAX. Se recomienda proporcionar límite superior e inferior. Por ejemplo, si la columna de partición "ID" tiene valores que van de 1 a 100 y establece el límite inferior en 20 y el superior en 80, con la copia en paralelo establecida en 4, el servicio recupera los datos en 4 particiones: identificadores del rango <=20, del rango [21, 50], del rango [51, 80] y del rango >=81, respectivamente. |
Carga de grandes cantidades de datos mediante una consulta personalizada, sin particiones físicas, aunque con una columna de tipo entero o date/datetime para la creación de particiones de datos. | Opciones de partición: partición por rangos dinámica. Consulta: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> .Columna de partición: especifique la columna usada para crear la partición de datos. Límite de partición superior y límite de partición inferior (opcional): especifique si quiere determinar el intervalo de la partición. No es para filtrar las filas de la tabla, se crean particiones de todas las filas del resultado de la consulta y se copian. Si no se especifica, la actividad de copia detecta automáticamente el valor. Por ejemplo, si la columna de partición "ID" tiene valores que van de 1 a 100 y establece el límite inferior en 20 y el superior en 80, con la copia en paralelo establecida en 4, el servicio recupera los datos en 4 particiones: identificadores del rango <=20, del rango [21, 50], del rango [51, 80] y del rango >=81, respectivamente. A continuación se muestran más consultas de ejemplo para distintos escenarios: • Consulta de la tabla completa: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition • Consulta de una tabla con selección de columnas y filtros adicionales de la cláusula where: SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • Consulta con subconsultas: SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • Consulta con partición en subconsulta: SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T |
Procedimientos recomendados para cargar datos con la opción de partición:
- Seleccione una columna distintiva como columna de partición (como clave principal o clave única) para evitar la asimetría de datos.
- Si la tabla tiene una partición integrada, use la opción de partición Particiones físicas de tabla para obtener un mejor rendimiento.
Consulta de ejemplo para comprobar la partición física
SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, pf.name AS PartitionFunctionName, c.name AS ColumnName, iif(pf.name is null, 'no', 'yes') AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
LEFT JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_id
LEFT JOIN sys.partition_functions pf ON pf.function_id = ps.function_id
WHERE s.name='[your schema]' AND t.name = '[your table name]'
Si la tabla tiene una partición física, verá "HasPartition" como "yes" como en el caso siguiente.
Resumen de tabla
Consulte la siguiente tabla para obtener el resumen y más información sobre la actividad de copia de SQL Server.
Información de origen
Nombre | Descripción | Value | Obligatorio | Propiedad de script JSON |
---|---|---|---|---|
Tipo de almacén de datos | El tipo de almacén de datos. | Externo | Sí | / |
Connection | La conexión al almacén de datos de origen. | < su conexión > | Sí | conexión |
Tipo de conexión | El tipo de conexión. Selección de un servidor SQL. | SQL Server | Sí | / |
Usar consulta | La consulta SQL personalizada para leer los datos. | • Tabla • Consulta • Procedimiento almacenado |
No | / |
Tabla | La tabla de datos de origen. | < nombre de la tabla> | No | esquema table |
Consultar | La consulta SQL personalizada para leer los datos. | < la consulta > | No | sqlReaderQuery |
Nombre del procedimiento almacenado | Esta propiedad es el nombre del procedimiento almacenado que lee datos de la tabla de origen. La última instrucción SQL debe ser una instrucción SELECT del procedimiento almacenado. | <Nombre del procedimiento almacenado> | No | sqlReaderStoredProcedureName |
Parámetro del procedimiento almacenado | Estos parámetros son para el procedimiento almacenado. Los valores permitidos son pares de nombre o valor. Los nombres y las mayúsculas y minúsculas de los parámetros tienen que coincidir con las mismas características de los parámetros de procedimiento almacenado. | < pares nombre o valor > | No | storedProcedureParameters |
Tiempo de espera de consulta | Tiempo de espera para la ejecución del comando de consulta. | timespan (el valor predeterminado es 120 minutos) |
No | queryTimeout |
Nivel de aislamiento | Especifica el comportamiento de bloqueo de transacción para el origen de SQL. | • Lectura confirmada • Lectura no confirmada • Lectura repetible • Serializable • Snapshot |
No | isolationLevel: • ReadCommitted • ReadUncommitted • RepeatableRead • Serializable • Snapshot |
Opción de partición | Las opciones de creación de particiones de datos que se usan para cargar datos desde un servidor SQL. | • Ninguno (valor predeterminado) • Particiones físicas de la tabla • Intervalo dinámico |
No | partitionOption: • Ninguno (valor predeterminado) • PhysicalPartitionsOfTable • DynamicRange |
Nombre de columna de partición | El nombre de la columna de origen de tipo entero o fecha/datetime (int , smallint , bigint , date , smalldatetime , datetime , datetime2 o datetimeoffset ) que se usa en la creación de particiones por rangos para la copia en paralelo. Si no se especifica, el índice o la clave primaria de la tabla se detectan automáticamente y se usan como columna de partición. Si usa una consulta para recuperar datos de origen, enlace ?DfDynamicRangePartitionCondition en la cláusula WHERE. |
<los nombres de columna de partición> | No | partitionColumnName |
Límite superior de partición | Valor máximo de la columna de partición para la división del rango de partición. Este valor se usa para decidir el intervalo de particiones, no para filtrar las filas de la tabla. Se crean particiones de todas las filas de la tabla o el resultado de la consulta y se copian. Si no se especifica, la actividad de copia detecta automáticamente el valor. | <límite superior de partición> | No | partitionUpperBound |
Límite inferior de partición | Valor mínimo de la columna de partición para la división del rango de partición. Este valor se usa para decidir el intervalo de particiones, no para filtrar las filas de la tabla. Se crean particiones de todas las filas de la tabla o el resultado de la consulta y se copian. Si no se especifica, la actividad de copia detecta automáticamente el valor. | <límite inferior de partición> | No | partitionLowerBound |
Columnas adicionales | Agregue columnas de datos adicionales para almacenar la ruta de acceso relativa o el valor estático de los archivos de origen. La expresión se admite para este último. | • Name • Valor |
No | additionalColumns: • nombre • valor |
Información de destino
Nombre | Descripción | Value | Obligatorio | Propiedad de script JSON |
---|---|---|---|---|
Tipo de almacén de datos | El tipo de almacén de datos. | Externo | Sí | / |
Connection | La conexión al almacén de datos de destino. | < su conexión > | Sí | conexión |
Tipo de conexión | El tipo de conexión. Selección de un servidor SQL. | SQL Server | Sí | / |
Opción de tabla | Especifica si se debe crear automáticamente la tabla de destino si no existe según el esquema de origen. | • Usar existente • Crear tabla automáticamente |
No | tableOption: • autoCreate |
Tabla | La tabla de datos de destino. | <nombre de la tabla> | Sí | esquema table |
Comportamiento de escritura | Comportamiento de escritura de la actividad de copia para cargar datos en la base de datos de un servidor SQL. | • Insertar • Upsert • Procedimiento almacenado |
No | writeBehavior: • insert • upsert sqlWriterStoredProcedureName, sqlWriterTableType, storedProcedureTableTypeParameterName, storedProcedureParameters |
Usar TempDB | Si se usa una tabla temporal global o una tabla física como tabla provisional para upsert. | seleccionado (predeterminado) o no seleccionado | No | uso de TempDB: true (valor predeterminado) o false |
Selección del esquema de base de datos de usuario | Esquema provisional para crear una tabla provisional si se usa la tabla física. Nota: el usuario debe tener el permiso para crear y eliminar la tabla. De manera predeterminada, una tabla provisional compartirá el mismo esquema que una tabla de destino. Aplicar cuando no seleccione Usar TempDB. | seleccionado (predeterminado) o no seleccionado | No | interimSchemaName |
Columnas de clave | Nombres de columna para la identificación de fila única. Se puede usar una sola clave o una serie de claves. Si no se especifica, se usa la clave principal. | < columna de clave> | No | keys |
Nombre del procedimiento almacenado | El nombre del procedimiento almacenado que define cómo se aplican los datos de origen en una tabla de destino. Este procedimiento almacenado se invoca por lote. Para las operaciones que solo se ejecuta una vez y que no tiene nada que ver con los datos de origen, como por ejemplo, eliminar o truncar, use la propiedad Script de copia previa. | <nombre del procedimiento almacenado> | No | sqlWriterStoredProcedureName |
Tipo de tabla. | Nombre del tipo de tabla que se usará en el procedimiento almacenado. La actividad de copia permite que los datos que se mueven estén disponibles en una tabla temporal con este tipo de tabla. El código de procedimiento almacenado puede combinar los datos copiados con datos existentes. | <nombre de tipo de tabla > | No | sqlWriterTableType |
nombre de parámetro de tipo de tabla | Nombre del parámetro del tipo de tabla especificado en el procedimiento almacenado. | <nombre del parámetro del tipo de tabla > | No | storedProcedureTableTypeParameterName |
Parámetros | Parámetros del procedimiento almacenado. Los valores permitidos son pares de nombre y valor. Los nombres y las mayúsculas y minúsculas de los parámetros deben coincidir con las mismas características de los parámetros de procedimiento almacenado. | < pares nombre y valor > | No | storedProcedureParameters |
Bloqueo de tabla de inserción masiva | Use esta configuración para mejorar el rendimiento de la copia durante una operación de inserción masiva en una tabla sin índice de varios clientes. | Sí o No (valor predeterminado) | No | sqlWriterUseTableLock: true o false (valor predeterminado) |
Pre-copy script (Script anterior a la copia) | Un script para que la actividad de copia se ejecute antes de escribir datos en una tabla de destino en cada ejecución. Puede usar esta propiedad para limpiar los datos cargados previamente. | < script anterior a la copia > (string) |
No | preCopyScript |
Tiempo de espera de escritura por lotes | Tiempo que se concede a la operación de inserción por lotes para que finalice antes de que se agote el tiempo de espera. | timespan (el valor predeterminado es "02:00:00") |
No | writeBatchTimeout |
Tamaño del lote de escritura | Número de filas que se va a insertar en la tabla SQL por lote. De manera predeterminada, el servicio determina dinámicamente el tamaño adecuado del lote en función del tamaño de fila. | < número de filas > (entero) |
No | writeBatchSize |
Número máximo de conexiones simultáneas | Número máximo de conexiones simultáneas establecidas en el almacén de datos durante la ejecución de la actividad. Especifique un valor solo cuando quiera limitar las conexiones simultáneas. | < límite superior de conexiones simultáneas > (entero) |
No | maxConcurrentConnections |