#character-encoding #amazon-redshift #special-characters #amazon-redshift-spectrum
Вопрос:
Я пытаюсь создать внешнюю Spectrum
таблицу поверх обычных текстовых файлов, но некоторые значения считаются нулевыми, поскольку они содержат специальные символы.
Создать инструкцию:
create external table s.table_1
(
id bigint,
city varchar(100)
)
partitioned by (file_date varchar(25))
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties ('quoteChar'='"', 'separatorChar'=';', 'serialization.format'='1') stored as
inputformat 'org.apache.hadoop.mapred.TextInputFormat'
outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location 's3://my_bucket/my_prefix/'
table properties ('skip.header.line.count'='1');
Но результаты, которые я получаю при выборе, таковы:
id,city
1,<null>
2,<null>
3,Erfurt
4,Erfurt
5,Lahr
Вместо ожидаемого:
id,city
1,Mönchengladbach
2,Mönchengladbach
3,Erfurt
4,Erfurt
5,Lahr
Я пытался:
- установить
serdeproperties 'serialization.format'= '1'
или'UTF-8'
или'Latin-1'
или'ISO 8859-1'
- установите
row format delimited fields terminated by ';'
и изменитеserialization.format
значениеtable properties
но ничего из вышеперечисленного не сработало. Я просто копирую файл, и мне было бы удобно загрузить его без необходимости преобразовывать его заранее. Есть какие-нибудь предложения? Заранее спасибо.
Комментарии:
1. У меня нет под рукой кластера, но разве кодировка текста не задана в свойствах кластера? может быть, это влияет на Спектр. В любом случае, вы обнаружили одну из ключевых причин отказа от использования Spectrum; тихие ошибки.