Проблемы с паркетом с десятичной дробью в Azure Data Factory V2

#azure-data-factory-2

#azure-data-factory

Вопрос:

С 3 или 4 дней у меня возникают проблемы с записью десятичных значений в формате файла parquet с Azure Data Factory V2.

Шаги воспроизведения довольно просты: из источника SQL, содержащего числовое значение, я сопоставляю его с файлом parquet, используя операцию копирования.

Во время выполнения выдается следующее исключение:

 {
    "errorCode": "2200",
    "message": "Failure happened on 'Source' side. ErrorCode=UserErrorParquetTypeNotSupported,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Decimal Precision or Scale information is not found in schema for column: ADDRESSLONGITUDE,Source=Microsoft.DataTransfer.Richfile.ParquetTransferPlugin,''Type=System.InvalidCastException,Message=Object cannot be cast from DBNull to other types.,Source=mscorlib,'",
    "failureType": "UserError",
    "target": "Copy Data"
}
  

В исходном коде столбец с жалобой определен как числовой (32,6) тип.

Я думаю, что проблема связана с приемником parquet, потому что изменение формата назначения на csv приводит к успешному конвейеру.

Есть предложения?

Основываясь на ответе Джея, вот весь набор данных :

 SELECT 
    [ADDRESSLATITUDE]
FROM 
    [dbo].[MyTable]
  

результат запроса

Ответ №1:

На основе типов SQL для логических типов Parquet и сопоставления типов данных для файлов Parquet в операции копирования фабрики данных, он поддерживает Decimal тип данных.Десятичные данные преобразуются в двоичный тип данных.

введите описание изображения здесь

Вернемся к вашему сообщению об ошибке:

Сбой произошел на стороне «источника». Код ошибки=UserErrorParquetTypeNotSupported, ‘Тип=Microsoft.Передача данных.Общий.Общий доступ.Исключение HybridDeliveryException, сообщение = Информация о десятичной точности или масштабе не найдена в схеме для столбца: Длительность адреса, источник = Microsoft.передача данных.Richfile.ParquetTransferPlugin, «Тип = System.Исключение InvalidCastException, сообщение = Объект не может быть преобразован из DBNull в другие типы.,Источник = mscorlib,’

Если ваши числовые данные имеют null значение, они будут преобразованы в Int тип данных без какой-либо информации о десятичной точности или масштабе.

введите описание изображения здесь

В формате Csv отсутствует этот процесс преобразования, поэтому вы могли бы установить значение по умолчанию для своих числовых данных.

Комментарии:

1. Спасибо за твой ответ, Джей. Означает ли это, что десятичная дробь с нулевым значением не поддерживается? нахх .. не могу в это поверить!!

2. @FabriceMichellonet Не могли бы вы просто извлечь несколько образцов данных, чтобы выполнить тот же тест?

3. Более того, в моем примере нет нулевых значений. ВЫБЕРИТЕ [ШИРОТУ АДРЕСА] ИЗ [dbo]. [MyTable] возвращает 3 ненулевые строки, точное значение равно 0.000000.

4. @FabriceMichellonet Пытается воспроизвести вашу проблему, любой прогресс будет обновлен в моем ответе. Спасибо.