es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo forzar la asignación en la actividad de copia de Azure Data Factory

Estoy intentando copiar datos de un contenedor de Cosmos DB a una tabla de base de datos de Azure SQL usando Azure Data Factory.
Algunas de mis columnas en Cosmos DB no son obligatorias y es posible que no estén definidas. El problema es que por cada una de estas columnas, obtengo el siguiente error al ejecutar la actividad de copia:

No se puede inferir el tipo de datos de la columna 'MyProperty' a partir de la primera fila de datos, especifique su tipo de datos en los mapeos de la actividad de copia o estructura del conjunto de datos.

Sin embargo, verifiqué en la pestaña de mapeos y los tipos de estas propiedades se infieren correctamente como cadenas de texto y son nulos en mi tipo de tabla de procedimiento almacenado de SQL.

También tengo el mismo problema con las propiedades decimales opcionales, donde el error dice que no se puede analizar el valor a Int64, aunque el tipo inferido en la pestaña de mapeos está establecido como número y no como entero…

Aquí está el mapeo que tengo actualmente:
enter image description here

Y el procedimiento almacenado con el tipo de tabla:

CREATE TYPE [dbo].[MyTableType] AS TABLE
(
    [Id] varchar(256) NOT NULL PRIMARY KEY,
    [SupplierId] varchar(256) NOT NULL,
    [SupplierClientId] varchar(256) NULL,
    [BuyerId] varchar(256) null
)

CREATE PROCEDURE [dbo].[UpsertItems]
    @itemsTable MyTableType readonly
AS
BEGIN
    MERGE MyTable AS target
    USING @itemsTable AS source
    ON (target.Id = source.Id)
    WHEN MATCHED THEN
        UPDATE SET 
            SupplierId = source.SupplierId,
            SupplierClientId = source.[SupplierClientId],
            BuyerId = source.[BuyerId]
    WHEN NOT MATCHED THEN
      INSERT (Id, SupplierId, SupplierClientId, BuyerId)
      VALUES (
        source.Id, 
        source.SupplierId, 
        source.[SupplierClientId], 
        source.[BuyerId]);
END

No puedo encontrar una forma de forzar el tipo de datos de esta propiedad, ya sea en el conjunto de datos directamente o en la pestaña de mapeos de la actividad de copia. ¿Cómo puedo solucionar el problema?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en la incapacidad de Azure Data Factory de inferir el tipo de datos de algunas de las columnas en el contenedor de Cosmos DB. El mensaje de error sugiere que no se puede inferir el tipo de datos de la columna a partir de la primera fila de datos.

    Para solucionar este problema, deberá especificar el tipo de datos de las columnas afectadas en la pestaña ‘Mapeos’ de la actividad de copia. En su caso específico, parece que la columna ‘MiPropiedad’ se ha inferido correctamente como un tipo de datos string, pero la columna ‘ValorDecimalArbitrario’ se está interpretando como un entero.

    Para resolver el problema, deberá asegurarse de que el tipo de datos en la pestaña de mapeos esté configurado como ‘Decimal’ en lugar de ‘Número’. También puede intentar especificar el tipo de datos de la columna en el propio contenedor de Cosmos DB.

    Una vez que se especifique el tipo de datos para las columnas problemáticas, Azure Data Factory debería poder copiar los datos a la tabla de la base de datos SQL de Azure sin ningún problema.

Comments are closed.