Что означает «формат контейнера для полей в строке» для формата файла? - PullRequest
1 голос
/ 14 мая 2019

С Hadoop: полное руководство :

Существует два измерения, которые управляют хранением таблицы в Hive: строка формат и формат файла.

Формат строки определяет, как строки и поля в определенной строке, сохраняются. В улейском языке, строка формат определяется SerDe, словом портманто для Serializer-десериализации. Когда действует как десериализатор, который является в случае запроса таблицы SerDe десериализует строку данных от байтов в файле к объектам, используемым внутри Hive для работать с этим рядом данных. При использовании в качестве сериализатора, который является случай при выполнении INSERT или CTAS (см. «Импорт данных» на странице 500), SerDe таблицы будет сериализовать внутреннее представление Hive строки данных в байты, которые записываются в выходной файл.

Формат файла определяет формат контейнера для полей в строке. Простейший формат - это простой текстовый файл, но он ориентирован на строки и Также доступны двоичные форматы, ориентированные на столбцы.

Что означает «формат контейнера для полей в строке» для формата файла?

Чем формат файла отличается от формата строки?

1 Ответ

1 голос
/ 15 мая 2019

Читайте также руководство о 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, но в этом случае формат строки с разделителями будет игнорироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...