Читайте также руководство о SerDe
Hive использует SerDe (и FileFormat) для чтения и записи строк таблицы.
HDFS files --> InputFileFormat --> <key, value> --> Deserializer --> Row object
Row object --> Serializer --> <key, value> --> OutputFileFormat --> HDFS files
Вы можете создавать таблицы с пользовательским SerDe или с использованием собственного SerDe. Нативный SerDe используется, если ROW FORMAT не указан или ROW FORMAT DELIMITED указан
Формат файла представляет собой контейнер файла, это может быть текстовый или двоичный формат, например ORC или Parquet.
Формат строки может быть простым текстом с разделителями или довольно сложным regexp / на основе шаблона или JSON, например.
Рассмотрим записи в формате JSON в текстовом файле:
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE
Или записи JSON в файле последовательности:
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS SEQUENCEFILE
На самом деле все является классом Java. Что очень запутанно для начинающих, так это то, что в DDL возможны ярлыки, что позволяет писать DDL без указания длинных и сложных имен классов для всех форматов. Некоторые классы не имеют соответствующих ярлыков, встроенных в язык DDL.
ХРАНЕНО КАК ПОСЛЕДОВАТЕЛЬНО - это сокращение для
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.SequenceFileInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.mapred.SequenceFileOutputFormat'
Эти два класса определяют способ чтения / записи файлового контейнера.
И этот класс определяет, как строка должна храниться и читаться (JSON):
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
А теперь DDL с форматом строки и форматом файла без ярлыков:
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.SequenceFileInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.mapred.SequenceFileOutputFormat'
И чтобы еще лучше понять разницу, взгляните на класс SequenceFileOutputFormat (расширяет FileOutputFormat) и JsonSerDe (реализует SerDe) Вы можете углубиться и попытаться понять реализованные и базовые методы классы / интерфейсы, посмотрите исходный код, сериализуйте и десериализуйте методы в JsonSerDe class .
И «формат контейнера для полей в строке» - это FileInputFormat плюс FileOutputFormat, упомянутые в вышеупомянутых DDL. Например, в случае файла ORC вы не можете указать формат строки (с разделителями или другой SerDe). Файл ORC указывает, что OrcSerDe будет использоваться только для этого типа файлового контейнера, который имеет собственный внутренний формат для хранения строк и столбцов. На самом деле вы можете написать ROW FORMAT DELIMITED STORED AS ORC в Hive, но в этом случае формат строки с разделителями будет игнорироваться.