Производный столбец SSIS из CSV (преобразование строки в число с плавающей запятой)

Я получил CSV, как показано ниже. В столбце есть несколько пустых строк, а CSV дает значения в виде строки. Но я хочу сделать его числом с плавающей запятой, например, «3.00000» с 5 десятичными знаками. Во-первых, мне нужно заменить символ «,» и заменить нулевые значения. Я использовал это производное выражение столбца: (DT_R8)REPLACE(ISNULL(Col1) ? "0.0000" : Col1,",","."), но оно не работает. Ребята, вы знаете выражение получше? Столбец выглядит следующим образом:

+---------+
|  Col1   |
+---------+
| 3,00000 |
|         |
| 4,00000 |
| 6.56565 |
|         |
| 4.54545 |
+---------+

person Aercheon    schedule 09.12.2019    source источник
comment
не работает - это не постановка проблемы. Выдает ошибку? Не получается заменить запятые? Не удается преобразовать значения в десятичные дроби? Это неправильно обрабатывает пустые строки? Что не работает?   -  person Eric Brandt    schedule 09.12.2019
comment
Ошибка: 0xC0049064 в задаче потока данных, производный столбец [2]: произошла ошибка при попытке выполнить приведение типа.   -  person Aercheon    schedule 09.12.2019
comment
Ошибка: 0xC0209029 в задаче потока данных, производный столбец [2]: код ошибки SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. Произошел сбой производного столбца из-за кода ошибки 0xC0049064, а расположение строки ошибки в производном столбце.Выводы[вывод производного столбца].Columns[производный столбец 1] указывает на сбой при ошибке. Произошла ошибка в указанном объекте указанного компонента. Перед этим могут быть опубликованы сообщения об ошибках с дополнительной информацией о сбое.   -  person Aercheon    schedule 09.12.2019
comment
Ошибка: 0xC0047022 в задаче потока данных, SSIS.Pipeline: код ошибки SSIS DTS_E_PROCESSINPUTFAILED. Метод ProcessInput для производного столбца компонента (2) завершился сбоем с кодом ошибки 0xC0209029 при обработке входных данных производного столбца (3). Идентифицированный компонент вернул ошибку из метода ProcessInput.   -  person Aercheon    schedule 09.12.2019
comment
Ошибка приведения типа, извините за неправильную информацию   -  person Aercheon    schedule 09.12.2019
comment
В общем, будьте осторожны с поплавком. Используйте числовое значение, если это возможно. Причина... FLOAT - это оценка, и число один может быть сохранено как 1.00000000000001 или .99999999999, что, очевидно, не равно 1.   -  person KeithL    schedule 09.12.2019
comment
@Aercheon, не могли бы вы пометить ответ ниже как ответ, если он ответил на ваш вопрос? Спасибо.   -  person BICube    schedule 06.01.2020


Ответы (1)


Я считаю, что вам нужно будет обратить внимание на две вещи здесь. Во-первых, вполне вероятно, что ячейки с запятой в них распознаются как строки, и поэтому они будут использовать текстовый квалификатор кавычек. Если вы не настроите это явно в SSIS, SSIS сохранит кавычки, и тогда вы не сможете преобразовать эту строку в числовую. Чтобы подтвердить, в диспетчере соединений проверьте предварительный просмотр. Если ваши числа имеют двойные кавычки, как показано ниже, вам нужно установить квалификатор текста в кавычку.

Снимок перед установкой классификатора текста:

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

Теперь, если это так, вам нужно перейти в «Общие» и убедиться, что для квалификатора текста установлено значение «», как показано ниже.

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

После этого вы можете убедиться, что ваш предварительный просмотр исправлен введите здесь описание изображения

Проблема, с которой вы столкнулись, предполагает, что вы имеете дело со значениями NULL. Это не тот случай, когда ваш столбец имеет строковый тип, импортированный из плоского файла. Здесь вы имеете дело с пустой строкой. Итак, вам нужно изменить свое выражение, чтобы оно было:

(DT_R8)REPLACE(Col1 == "" ? "0.0000" : Col1,",",".")

Наконец, понимаете ли вы, что замена «,» на «.» приведет к преобразованию «3,00000» в 3.0? Убедитесь, что это ожидаемое поведение.

Выполнение приведенного выше приведет к следующему производному столбцу

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

person BICube    schedule 09.12.2019