SSIS: преобразование типов данных в запросе SOQL для таблицы проверки SSMS - PullRequest
2 голосов
/ 17 апреля 2019

Я работаю над EDW, который использует SSIS для добавления таблиц SalesForce. Я нахожусь в процессе написания запроса проверки на CData Salesforce Source, который будет возвращать CURRENT_DATEIME () для того момента, когда он был загружен, а также сумму значений столбцов, чтобы использовать их позже в моей стратегии проверки. У меня есть результаты импорта этих столбцов в исходную таблицу проверки в SSMS. Проблема, с которой я сталкиваюсь, состоит в том, что CData по умолчанию устанавливает столбцы в типы данных STRING, когда мне нужно NUMERIC для обоих типов, но, очевидно, вы не можете анализировать, преобразовывать или приводить в запросе SOQL. Каков будет лучший способ конвертировать их?

Вот мой запрос до сих пор .....

SELECT TABLE_NAME, SOURCE_COLUMN_VALUE, COLUMN_NUMBER, LOAD_DATE, LOAD_DATETIME 
FROM (
      SELECT 'TABLE' AS TABLE_NAME, COUNT(*) AS SOURCE_COLUMN_VALUE, 0 AS 
      COLUMN_NUMBER, CURRENT_DATE() AS LOAD_DATE, CURRENT_TIMESTAMP() AS 
      LOAD_DATETIME  
      FROM [TABLE] UNION ALL

      SELECT 'TABLE' AS TABLE_NAME, SUM(CASE WHEN Id IS NULL THEN 0 ELSE 1 
      END) AS SOURCE_COLUMN_VALUE,  1 AS COLUMN_NUMBER, CURRENT_DATE() AS 
      LOAD_DATE,CURRENT_TIMESTAMP() AS LOAD_DATETIME FROM [TABLE]
)

Мне нужно преобразовать выбранные столбцы SOURCE_COLUMN_VALUE и LOAD_DATETIME в NUMERIC, используя SOQL.

Я уже пробовал TO_NUMBER () и NUMERIC.PARSE () уже

Это ошибка, которую я продолжаю получать

Ошибка: 0xC020901C в BASS_USER_VALIDATION, Назначение OLE DB [29]: Произошла ошибка с Назначением OLE DB. Входы [Вход назначения OLE DB]. Колонки [LOAD_DATE] на Назначении OLE DB. Входы [Вход назначения OLE DB]. Возвращено состояние столбца: «Не удалось преобразовать значение из-за потенциальной потери данных.».

Ошибка: 0xC0209029 в BASS_USER_VALIDATION, адресат OLE DB [29]: код ошибки SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. «Назначение OLE DB. Входы [Вход назначения OLE DB]» завершилось ошибкой, поскольку произошел код ошибки 0xC0209077, а расположение строки ошибки в «Назначение OLE DB. Входы [Назначение OLE DB]» указывает на ошибку при ошибке. Произошла ошибка в указанном объекте указанного компонента. Перед этим могут быть сообщения об ошибках с дополнительной информацией о сбое.

Ошибка: 0xC0047022 в BASS_USER_VALIDATION, SSIS. Трубопровод: код ошибки SSIS DTS_E_PROCESSINPUTFAILED. Метод ProcessInput для компонента «Назначение OLE DB» (29) завершился ошибкой с кодом ошибки 0xC0209029 при обработке ввода «Вход назначения OLE DB» (42). Указанный компонент возвратил ошибку из метода ProcessInput. Ошибка относится только к компоненту, но является фатальной и приводит к остановке выполнения задачи «Поток данных». Перед этим могут быть сообщения об ошибках с дополнительной информацией о сбое.

1 Ответ

1 голос
/ 18 апреля 2019

В итоге мы решили проблему с помощью производного столбца, в котором мы смогли взять строку даты и времени, проанализировать ее до необходимого и преобразовать в числовой тип. Не самый эффективный, я уверен, но он делает то, что должно быть сделано! (Таблицы SalesForce будут моей смертью)

(DT_NUMERIC,12,4)(DT_DATE)(SUBSTRING(LOAD_DATETIME,1,4) + "-" + SUBSTRING(LOAD_DATETIME,FINDSTRING(LOAD_DATETIME,"-",1) + 1,2) + "-" + SUBSTRING(LOAD_DATETIME,FINDSTRING(LOAD_DATETIME,"-",2) + 1,2) + " " + SUBSTRING(LOAD_DATETIME,FINDSTRING(LOAD_DATETIME,"T",1) + 1,2) + ":" + SUBSTRING(LOAD_DATETIME,FINDSTRING(LOAD_DATETIME,":",1) + 1,2))

enter image description here

...