#sql #snowflake-cloud-data-platform
#sql #snowflake-cloud-data-platform
Вопрос:
Я пытаюсь вставить данные из промежуточной таблицы в основную таблицу. Таблица содержит почти 300 столбцов и представляет собой смесь переменных, набранных с использованием данных, целых чисел, десятичных знаков, дат и т. Д.
Snowflake выдает бесполезное сообщение об ошибке «Числовое значение » не распознано«
Я просмотрел и вырезал различные части запроса, чтобы попытаться определить, откуда он исходит. После нескольких часов и сокращения каждого столбца это все еще происходит.
Кто-нибудь знает о диагностическом запросе Snowflake (например, Redshift), который может указать мне конкретный столбец, в котором возникает проблема?
Ответ №1:
К сожалению, не в той точке, в которой вы находитесь. Если бы вы вернулись к КОПИИ, в которую были загружены данные, вы могли бы использовать функцию VALIDATE() для получения более подробной информации о записи и уровне смещения байтов.
Я бы запросил в вашей промежуточной таблице только числовые поля и искал пробелы, или вы можете обернуть все свои поля, предназначенные для числовых полей, с помощью функций try_to_number() . Немного утомительно, но может быть не так уж плохо, если у вас не так много чисел.
https://docs.snowflake.com/en/sql-reference/functions/try_to_decimal.html
В качестве примечания, когда вы выполняете stage, вы должны попытаться использовать параметры NULL_IF, чтобы избавиться от неверных символов и / или попытаться загрузить их в stage, используя фактические типы данных в вашей таблице stage, чтобы вы могли использовать функцию VALIDATE(), чтобы убедиться, что типы данных верны перед загрузкой в STAGE.Снежинка.
Ответ №2:
Запросите свою промежуточную версию, используя try_to_number() и / или try_to_decimal() для числовых и десятичных полей таблицы, и используйте минус, чтобы получить разницу
Выберите $ 1, $ 2, … $ 300 из @stage
минус
Выберите $ 1, try_to_number ($ 2) … $ 300 из @stage
Если в каком-либо числовом поле есть строка, которая не может быть преобразована, тогда она будет равна нулю, а затем минус должен возвращать те строки, в которых есть проблема..Как только вы получите строки, попробуйте проанализировать столбцы в результирующем наборе на наличие ошибок.