Улей — вставка значений в массив из файла (через запятую и точку с запятой)

#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 Я обновил ответ для будущих ссылок пользователей