#arrays #hadoop #hive
#массивы #hadoop #улей
Вопрос:
У меня есть файл со столбцами, разделенными точками с запятой. Я хочу добавить type
столбец как Array<String>
. Теперь у меня есть то, что я сохраняю свои значения в необработанном виде, точно так же, как это ( type
столбец представляет собой текст):
| age | type | country |
24 a us
29 a,b au <--------- this line is not OK
25 a uk
Мой файл выглядит следующим образом:
age;type1,type2;country
age;type1;country
age;type2;country
Как мне правильно поместить типы в мою таблицу как Array<String>
?
Ответ №1:
Будут работать те же данные. Создать таблицу :
CREATE TABLE array_data_type(
age int,
type array<string>,
contry varchar(100))
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ';'
COLLECTION ITEMS TERMINATED BY ',';
Загрузите те же данные в эту таблицу.
Если эти данные находятся в локальном файле:
LOAD DATA LOCAL INPATH '<file-path>' INTO TABLE array_data_type;
или в случае файла HDFS:
LOAD DATA INPATH '<hdfs-file-path>' INTO TABLE array_data_type;
Комментарии:
1. Отлично. Но что, если в моей стране есть запятая, но я не хочу хранить ее в виде массива? Будет ли это ошибка или что-то в этом роде? Спасибо!
2. @r3v0lt country не относится к типу массива. Так что проблем не будет.
3. Спасибо за ответ. Однако у меня следующая ошибка: СБОЙ: ошибка ParseException строка 8: 22 несоответствующий ввод ‘<EOF>’, ожидающий строковую строку рядом с ‘BY’ в разделителе полей формата строки таблицы. Есть какой-нибудь намек?
4. Ок, понял. Я помню, что
;
код OCT равен 073. Поэтому я заменил';'
на'73'
. Спасибо!5. @r3v0lt Я обновил ответ для будущих ссылок пользователей