Разделители Hive по умолчанию:
- Разделитель строк => Control-A ('\001')
- Разделитель элементов коллекции => Control-B ('\002')
- Разделитель ключей карты => Control-C ('\003')
Если вы переопределяете эти разделители, то во время синтаксического анализа используются переопределенные разделители. Приведенное выше описание разделителей верно для обычного случая плоских структур данных, где сложные типы содержат только примитивные типы. Для вложенных типов разделитель определяется уровнем вложенности.
Например, для массива массивов разделителями для внешнего массива являются символы Control-B ('\002'), как и ожидалось, но для внутреннего массива это символы Control-C ('\003'), следующие разделитель в списке.
На самом деле Hive поддерживает восемь уровней разделителей, соответствующих кодам ASCII 1, 2, ... 8, но вы можете переопределить только первые три.
В вашем случае разделитель для элементов во вложенном поле типа данных «Массив карты» sabu будет «\004», поскольку разделитель ключа карты — «\003» (переопределено как ':') .
Таким образом, вы можете записать свой входной файл в следующем формате:
1|JOHN|abu1/abu2|key1:1'\004'2'\004'3/key2:6'\004'7'\004'8
Выход SELECT * FROM test_stg;
будет:
1 JOHN ["abu1","abu2"] {"key1":[1,2,3],"key2":[6,7,8]}
Ссылка: Hadoop The Definitive Guide — Chapter 12: Hive, Page No: 433, 434
person
GS Majumder
schedule
16.09.2013