2015-04-26 2 views
0

У меня есть две таблицы. Таблица A является операционным хранилищем, а таблица B - таблицей назначения.Redshift - усекающаяся строка при вводе в цель

Таблица A DDL: Колонка A Varchar (1000)

Таблица B DDL: Колонка B Varchar (250)

Так что я пытаюсь сделать вставку усеченного столбца А, так: Вставка в таблицу B (выберите левый (таблица a.column а, 249)), но это дает ошибку

«ошибка: значение слишком долго для символьного типа»

Я также попытался подстроки попробовать иусечь текст, но безрезультатно. Обратите внимание, что в колонке А есть арабский текст, но он не был проблемой в таблице А.

Любая помощь/предложения были бы высоко оценены!

+0

опубликовать вставку. – valentin

+0

Я сомневаюсь, что это полная ошибка. Вероятно, это говорит о том, что значение слишком велико для символа (250). Хотя Redshift на самом деле не PostgreSQL, так кто знает. ** Показать полное, точное сообщение об ошибке ** и точный SQL, который вы используете. –

+0

ОШИБКА: Значение слишком длинное для символьного типа Деталь: ------------------------------------- ---------- ошибка: Значение слишком долго для символьного типа код: 8001 контекст: Значения слишком долго для типа характера различного (250) запроса: 769317 местоположения: funcs_string.hpp: 390 процесса : query0_44 [pid = 12023] ------------------------------------------ ----- – MrZ

ответ

2

Проблема заключается в том, что каждый арабский символ принимает более 1 байт, потому что RedShift является Unicode DB. Определение varchar находится в байтах. Поэтому, чтобы быть в безопасности, вы можете разделить все на 4.

+0

Hi Yuri. Да, похоже, это так. Я установил его в varchar (140) на целевой таблице и пока, так хорошо. Я бы поднял тебя, если бы у меня был представитель! благодаря – MrZ

2

Чтобы обойти проблему многобайтовых символов, вы можете указать свое поле в желаемый размер VarChar, используя :: VarChar ([некоторая длина]). Для примера, вы могли бы сделать:

Вставка в таблицу B (выбрать таблицу a.column A :: VARCHAR (250))

Смежные вопросы