«Числовое значение » не распознано» — какой столбец?

#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

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