Creación de canalizaciones de copia de datos a gran escala con un enfoque basado en metadatos en la herramienta de copia de datos
SE APLICA A: Azure Data Factory Azure Synapse Analytics
Sugerencia
Pruebe Data Factory en Microsoft Fabric, una solución de análisis todo en uno para empresas. Microsoft Fabric abarca todo, desde el movimiento de datos hasta la ciencia de datos, el análisis en tiempo real, la inteligencia empresarial y los informes. ¡Obtenga más información sobre cómo iniciar una nueva evaluación gratuita!
Si desea copiar grandes cantidades de objetos (por ejemplo, miles de tablas) o cargar datos de una gran variedad de orígenes, el enfoque adecuado es introducir la lista de nombres de los objetos con los comportamientos de copia necesarios en una tabla de control y, a continuación, usar canalizaciones parametrizadas para leer lo mismo desde la tabla de control y aplicarlas a los trabajos en consecuencia. De este modo, puede mantener (por ejemplo, agregar o quitar) la lista de objetos que se va a copiar fácilmente actualizando los nombres de objeto en la tabla de control en lugar de volver a implementar las canalizaciones. Además, tendrá un único lugar para comprobar fácilmente qué objetos copiados por qué canalizaciones o desencadenadores con comportamientos de copia definidos.
La herramienta de copia de datos de ADF facilita el recorrido de la creación de estas canalizaciones de copia de datos controladas por metadatos. Después de pasar por un flujo intuitivo desde una experiencia basada en asistente, la herramienta puede generar canalizaciones parametrizadas y scripts de SQL para crear tablas de control externas en consecuencia. Después de ejecutar los scripts generados para crear la tabla de control en la base de datos de SQL, las canalizaciones leerán los metadatos de la tabla de control y las aplicarán automáticamente en los trabajos de copia.
Creación de trabajos de copia controlados por metadatos desde la herramienta de copia de datos
Seleccione Copia controlada por metadatos en la herramienta de copia de datos.
Debe introducir la conexión y el nombre de la tabla de control para que la canalización generada lea los metadatos.
Introduzca la conexión de su base de datos de origen. También se puede utilizar el servicio vinculado parametrizado.
Seleccione el nombre de la tabla para copiar.
Nota:
Si selecciona almacén de datos tabulares, tendrá la oportunidad de seleccionar también la carga completa o la carga diferencial en la página siguiente. Si selecciona Almacén de almacenamiento, puede seleccionar la carga completa solo en la página siguiente. Actualmente no se admite la carga incremental de nuevos archivos solo desde el almacén de almacenamiento.
Elija el comportamiento de carga.
Sugerencia
Si desea realizar una copia completa en todas las tablas, seleccione Carga completa de todas las tablas. Si desea realizar una copia incremental, puede seleccionar configurar cada tabla individualmente y elegir Carga delta, así como el nombre y el valor de la columna de la marca de agua para comenzar en cada tabla.
Seleccione Almacén de datos de destino.
En la página Configuración, puede decidir el número máximo de actividades de copia para copiar datos de su almacén de origen de forma simultánea mediante Número de tareas de copia simultáneas. El valor predeterminado es 20.
Después de la implementación de la canalización, puede copiar o descargar los scripts de SQL de la interfaz de usuario para crear la tabla de control y el procedimiento de almacenamiento.
Verá dos scripts de SQL.
- El primer script de SQL se usa para crear dos tablas de control. La tabla de control principal almacena la lista de tablas, la ruta de acceso de archivo o los comportamientos de copia. La tabla de control de conexión almacena el valor de conexión del almacén de datos si usó un servicio vinculado con parámetros.
- El segundo script de SQL se usa para crear un procedimiento de almacén. Se utiliza para actualizar el valor de marca de agua en la tabla de control principal cuando los trabajos de copia incremental se completan cada vez.
Abra SSMS para conectarse al servidor de tablas de control y ejecute los dos scripts de SQL para crear tablas de control y almacenar el procedimiento.
Consulte la tabla de control principal y la tabla de control de conexión para revisar los metadatos que contiene.
Tabla de control principal
Tabla de control de conexión
Vuelva al portal de ADF para ver y depurar canalizaciones. Verá una carpeta creada con el nombre "MetadataDrivenCopyTask_### ######". Haga clic en la canalización llamada "MetadataDrivenCopyTask###_TopLevel" y haga clic en ejecutar depuración.
Debe introducir los parámetros siguientes:
Nombre del parámetro Descripción MaxNumberOfConcurrentTasks Siempre puede cambiar el número máximo de actividades de copia simultáneas que se ejecutan antes de la ejecución de la canalización. El valor predeterminado será el que se introduce en la herramienta de copia de datos. MainControlTableName Siempre puede cambiar el nombre de la tabla de control principal para que la canalización obtenga los metadatos de esa tabla antes de ejecutarse. ConnectionControlTableName Siempre puede cambiar el nombre de la tabla de control de la conexión (opcional), por lo que la canalización obtendrá los metadatos relacionados con la conexión del almacén de datos antes de la ejecución. MaxNumberOfObjectsReturnedFromLookupActivity Para evitar alcanzar el límite de la actividad de búsqueda de salida, hay una manera de definir el número máximo de objetos devueltos por la actividad de búsqueda. En la mayoría de los casos, no es necesario cambiar el valor predeterminado. windowStart Cuando se especifica un valor dinámico (por ejemplo, aaaa/mm/dd) como ruta de acceso de carpeta, el parámetro se usa para pasar el tiempo de desencadenador actual a la canalización con el fin de rellenar la ruta de acceso de la carpeta dinámica. Cuando la canalización se desencadena mediante un desencadenador de programación o un desencadenador de ventanas de saltos de número, los usuarios no necesitan especificar el valor de este parámetro. Valor de ejemplo: 2021-01-25T01:49:28Z Habilite el desencadenador para operacionalizar las canalizaciones.
Actualización de la tabla de control mediante la herramienta de copia de datos
Siempre puede actualizar directamente la tabla de control agregando o quitando el objeto que se va a copiar o cambiando el comportamiento de copia de cada tabla. También creamos experiencia de interfaz de usuario en la herramienta de copia de datos para facilitar el recorrido de edición de la tabla de control.
Haga clic con el botón secundario en la canalización de nivel superior: MetadataDrivenCopyTask_xxx_TopLevel y luego seleccione Editar tabla de control.
Seleccione las filas de la tabla de control que quiera editar.
Vaya al rendimiento de la herramienta de copia de datos y aparecerá un nuevo script de SQL. Vuelva a ejecutar script de SQL para actualizar la tabla de control.
Nota
La canalización NO se volverá a implementar. El nuevo script de SQL ayuda a actualizar solo la tabla de control.
Tablas de control
Tabla de control principal
Cada fila de la tabla de control contiene los metadatos de un objeto (por ejemplo, una tabla) que se va a copiar.
Nombre de la columna | Descripción |
---|---|
ID | Id. único del objeto que se va a copiar. |
SourceObjectSettings | Metadatos del conjunto de datos de origen. Puede ser el nombre del esquema, el nombre de la tabla, etc. Aquí puede ver un ejemplo. |
SourceConnectionSettingsName | Nombre de la configuración de conexión de origen en la tabla de control de conexión. Es opcional. |
CopySourceSettings | Metadatos de la propiedad source en la actividad de copia. Puede ser una consulta, una partición, etc. Aquí puede ver un ejemplo. |
SinkObjectSettings | Metadatos del conjunto de datos de destino. Puede ser un nombre de archivo, una ruta de acceso de carpeta, nombre de tabla, etc. Aquí puede ver un ejemplo. Si se especifica la ruta de acceso de carpeta dinámica, el valor de la variable no se escribirá aquí en la tabla de control. |
SinkConnectionSettingsName | Nombre de la configuración de conexión de origen en la tabla de control de conexión. Es opcional. |
CopySinkSettings | Metadatos de la propiedad sink en la actividad de copia. Puede ser preCopyScript, tableOption, etc. Aquí puede ver un ejemplo. |
CopyActivitySettings | Metadatos de la propiedad translator en la actividad de copia. Se usa para definir la asignación de columnas. |
TopLevelPipelineName | Nombre de la canalización superior, que puede copiar este objeto. |
TriggerName | Nombre del desencadenador, que puede desencadenar la canalización para copiar este objeto. Si se ejecuta la depuración, el nombre es Sandbox. Si se realiza la ejecución manual, el nombre es Manual. Si la ejecución está programada, el nombre es el nombre del desencadenador asociado. Puede tener varios nombres. |
DataLoadingBehaviorSettings | Carga completa frente a carga diferencial. |
TaskId | El orden de los objetos que se van a copiar después de TaskId en la tabla de control (ORDER BY [TaskId] DESC). Si tiene grandes cantidades de objetos que se van a copiar, pero solo se permite un número simultáneo limitado de objetos copiados, puede cambiar el TaskId de cada objeto para decidir qué objetos se pueden copiar anteriormente. El valor predeterminado es 0. |
CopyEnabled | Especifique si el elemento está habilitado en el proceso de ingesta de datos. Valores permitidos: 1 (habilitado), 0 (deshabilitado). El valor predeterminado es 1. |
Tabla de control de conexión
Cada fila de la tabla de control contiene una configuración de conexión para el almacén de datos.
Nombre de la columna | Descripción |
---|---|
Nombre | Nombre de la conexión parametrizada en la tabla de control principal. |
ConnectionSettings | La configuración de la conexión. Puede ser, por ejemplo, el nombre de la base de datos, el nombre del servidor, etc. |
Canalizaciones
Verá que la herramienta de copia de datos genera tres niveles de canalizaciones.
MetadataDrivenCopyTask_xxx_TopLevel
Esta canalización calculará el número total de objetos (tablas, etc.) necesarios para copiarse en esta ejecución, aparecerá el número de lotes secuenciales en función de la tarea de copia simultánea máxima permitida y, a continuación, ejecutará otra canalización para copiar distintos lotes secuencialmente.
Parámetros
Nombre del parámetro | Descripción |
---|---|
MaxNumberOfConcurrentTasks | Siempre puede cambiar el número máximo de actividades de copia simultáneas que se ejecutan antes de la ejecución de la canalización. El valor predeterminado será el que se introduce en la herramienta de copia de datos. |
MainControlTableName | Nombre de la tabla de control principal. La canalización obtiene los metadatos de esta tabla antes de la ejecución. |
ConnectionControlTableName | Nombre de la tabla de control de conexión (opcional). La canalización obtiene los metadatos relacionados con la conexión del almacén de datos antes de la ejecución. |
MaxNumberOfObjectsReturnedFromLookupActivity | Para evitar alcanzar el límite de la actividad de búsqueda de salida, hay una manera de definir el número máximo de objetos devueltos por la actividad de búsqueda. En la mayoría de los casos, no es necesario cambiar el valor predeterminado. |
windowStart | Cuando se especifica un valor dinámico (por ejemplo, aaaa/mm/dd) como ruta de acceso de carpeta, el parámetro se usa para pasar el tiempo de desencadenador actual a la canalización con el fin de rellenar la ruta de acceso de la carpeta dinámica. Cuando la canalización se desencadena mediante un desencadenador de programación o un desencadenador de ventanas de saltos de número, los usuarios no necesitan especificar el valor de este parámetro. Valor de ejemplo: 2021-01-25T01:49:28Z |
Actividades
Nombre de la actividad | Tipo de actividad | Descripción |
---|---|---|
GetSumOfObjectsToCopy | Búsqueda | Calcule el número total de objetos (tablas, etc.) necesarios para copiarse en esta ejecución. |
CopyBatchesOfObjectsSequentially | ForEach | Se ofrece el número de lotes secuenciales en función del número máximo permitido de tareas de copia simultáneas y, a continuación, se ejecuta otra canalización para copiar lotes diferentes secuencialmente. |
CopyObjectsInOneBtach | Execute Pipeline | Ejecute otra canalización para copiar un lote de objetos. Los objetos que pertenecen a este lote se copiarán en paralelo. |
MetadataDrivenCopyTask_xxx_ MiddleLevel
Esta canalización copiará un lote de objetos. Los objetos que pertenecen a este lote se copiarán en paralelo.
Parámetros
Nombre del parámetro | Descripción |
---|---|
MaxNumberOfObjectsReturnedFromLookupActivity | Para evitar alcanzar el límite de la actividad de búsqueda de salida, hay una manera de definir el número máximo de objetos devueltos por la actividad de búsqueda. En la mayoría de los casos, no es necesario cambiar el valor predeterminado. |
TopLevelPipelineName | Nombre de la canalización de nivel superior. |
TriggerName | Nombre del desencadenador. |
CurrentSequentialNumberOfBatch | Id. del lote secuencial. |
SumOfObjectsToCopy | Número total de objetos para copiar. |
SumOfObjectsToCopyForCurrentBatch | Número de objetos que se copian en el lote actual. |
MainControlTableName | Nombre de la tabla de control principal. |
ConnectionControlTableName | Nombre de la tabla de control de conexión. |
Actividades
Nombre de la actividad | Tipo de actividad | Descripción |
---|---|---|
DivideOneBatchIntoMultipleGroups | ForEach | Divida los objetos de un solo lote en varios grupos paralelos para evitar alcanzar el límite de salida de la actividad de búsqueda. |
GetObjectsPerGroupToCopy | Búsqueda | Obtenga objetos (tablas, etc.) de la tabla de control que se deben copiar en este grupo. El orden de los objetos que se van a copiar después de TaskId en la tabla de control (ORDER BY [TaskId] DESC). |
CopyObjectsInOneGroup | Execute Pipeline | Ejecute otra canalización para copiar objetos de un grupo. Los objetos que pertenecen a este lote se copiarán en paralelo. |
MetadataDrivenCopyTask_xxx_ BottomLevel
Esta canalización copiará objetos de un grupo. Los objetos que pertenecen a este lote se copiarán en paralelo.
Parámetros
Nombre del parámetro | Descripción |
---|---|
ObjectsPerGroupToCopy | Número de objetos que se copian en el grupo actual. |
ConnectionControlTableName | Nombre de la tabla de control de conexión. |
windowStart | Se usaba para pasar el tiempo actual del desencadenador a la canalización con el fin de rellenar la ruta de acceso de la carpeta dinámica si el usuario lo configura. |
Actividades
Nombre de la actividad | Tipo de actividad | Descripción |
---|---|---|
ListObjectsFromOneGroup | ForEach | Enumera los objetos de un grupo e itera cada uno de ellos en actividades de nivel inferior. |
RouteJobsBasedOnLoadingBehavior | Switch | Compruebe el comportamiento de carga de cada objeto. Si es el caso predeterminado o FullLoad, realice la carga completa. Si se trata del caso DeltaLoad, realice una carga incremental a través de la columna de marca de agua para identificar los cambios. |
FullLoadOneObject | Copiar | Tome una instantánea completa en este objeto y cópiela en el destino. |
DeltaLoadOneObject | Copiar | Copie los datos modificados solo desde la última vez mediante la comparación del valor de la columna de marca de agua para identificar los cambios. |
GetMaxWatermarkValue | Búsqueda | Consulte el objeto de origen para obtener el valor máximo de la columna de marca de agua. |
UpdateWatermarkColumnValue | StoreProcedure | Reescriba el nuevo valor de marca de agua en la tabla de control que se usará la próxima vez. |
Limitaciones conocidas
- El nombre de IR, el tipo de base de datos y el tipo de formato de archivo no se pueden parametrizar en ADF. Por ejemplo, si desea ingerir datos de Oracle Server y SQL Server, necesitará dos canalizaciones con parámetros diferentes. Sin embargo, dos conjuntos de canalizaciones pueden compartir la tabla de control única.
- OPENJSON se usa en scripts SQL generados por la herramienta Copiar datos. Si usa SQL Server para hospedar la tabla de control, debe ser SQL Server 2016 (13.x) y versiones posteriores para admitir la función OPENJSON.
Contenido relacionado
Pruebe estos tutoriales que usan la herramienta Copy Data: