#floating-point #snowflake-cloud-data-platform
Вопрос:
У меня есть несколько десятичных чисел, которые отправляются Снежинке. Заметив, что эти числа не регистрируются в базе данных, я посмотрел на типы столбцов и увидел, что по умолчанию для них установлено ЧИСЛО(38,0). Я пошел дальше и изменил их типы на ПЛАВАЮЩИЕ, но данные все еще не регистрируются.
Есть ли что-то, что я должен сделать в дополнение к изменению типов столбцов на ПЛАВАЮЩИЕ?
Также я должен упомянуть, что у меня есть четыре столбца, которые принимают десятичные числа, из четырех три были установлены в ЧИСЛО(38,0) по умолчанию, а четвертый был установлен в ПЛАВАЮЩЕЕ значение по умолчанию. Столбец, установленный по умолчанию в значение FLOAT, всегда правильно регистрировал данные.
Комментарии:
1. Как вы изменили типы столбцов с ЧИСЛА(38,0) на ПЛАВАЮЩИЕ, воссоздав таблицу? Снежинка не позволяет изменять столбец с ЧИСЛА на ПЛАВАЮЩЕЕ или изменять масштаб числа. Можете ли вы привести пример на языке SQL?
2. Каков ваш источник данных? Как данные отправляются в Snowflake? Вы можете попробовать выполнить приведение к правильному масштабу до того, как данные будут записаны в Snowflake. Например, если ваш источник-Oracle, обратите внимание, что в Oracle ЧИСЛО может быть определено без масштаба и точности, даже если оно хранит десятичные дроби, и когда оно отправляется в Snowflake, оно становится ЧИСЛОМ(38,0), и десятичные дроби теряются. Чтобы преодолеть это, вы должны привести ЧИСЛО к нужному масштабу и точности, прежде чем писать в Snowflake.
3. @GregPavlik Я следовал инструкциям, предложенным Заибом Зией здесь: community.snowflake.com/s/question/0D50Z000098URJU/… — Добавить новый столбец -> Обновить новый столбец значениями старого столбца ->> Удалить старый столбец ->>> Переименовать новый столбец
4. @MajaF. Мой источник-Сегментная аналитика. Я изучил типизацию в сегменте, но, похоже, сегмент создает данные в формате JSON для отправки в пункт назначения
5. Если данные поступают к вам в формате JSON, то где-то на этом пути данные сглаживаются и преобразуются в тип данных перед загрузкой в вашу конечную целевую таблицу. Если это выполняется командой КОПИРОВАНИЯ или операторами СЛИЯНИЯ, вероятно, выполняются жестко запрограммированные приведения, которые не будут динамически изменяться только потому, что вы меняете типы данных столбцов. Я бы посмотрел туда.