Использование созданных извне файлов Parquet в Impala - PullRequest
0 голосов
/ 23 января 2019

Во-первых, извинения, если это прозвучало плохо, я пытался помочь себе, но мне не ясно, где это неправильно.

Я пытаюсь запросить данные в Impala, которые были экспортированы из другой системы. До сих пор он экспортировался в виде текстового файла с разделителями каналов, который я смог хорошо импортировать, создав таблицу с правильной настройкой разделителя, скопировав в файл и выполнив инструкцию refresh.

У нас были некоторые проблемы, когда в некоторых полях были символы перевода строки, и это выглядело так, как будто у нас есть больше данных, и они не обязательно соответствуют метаданным, которые я создал.
Было высказано предположение, что вместо этого мы можем использовать формат Parquet, и это прекрасно справится с внутренними переносами строк.

Я получил данные, и они выглядят примерно так (я изменил имя пользователя):

-rw-r--r--+ 1 UserName Domain Users  20M Jan 17 10:15 part-00000-6a763116-6728-4467-a641-32dd710857fe.snappy.parquet
-rw-r--r--+ 1 UserName Domain Users 156K Jan 17 10:15 .part-00000-6a763116-6728-4467-a641-32dd710857fe.snappy.parquet.crc
-rw-r--r--+ 1 UserName Domain Users  14M Jan 17 10:15 part-00001-6a763116-6728-4467-a641-32dd710857fe.snappy.parquet
-rw-r--r--+ 1 UserName Domain Users 110K Jan 17 10:15 .part-00001-6a763116-6728-4467-a641-32dd710857fe.snappy.parquet.crc
-rw-r--r--+ 1 UserName Domain Users    0 Jan 17 10:15 _SUCCESS
-rw-r--r--+ 1 UserName Domain Users    8 Jan 17 10:15 ._SUCCESS.crc

Если я создаю таблицу, хранящуюся как паркет через Impala, а затем выполняю hdfs dfs -ls, я получаю что-то вроде следующего:

-rwxrwx--x+  3 hive hive       2103 2019-01-23 10:00 /filepath/testtable/594eb1cd032d99ad-5c13d29e00000000_1799839777_data.0.parq
drwxrwx--x+  - hive hive          0 2019-01-23 10:00 /filepath/testtable/_impala_insert_staging

Что, очевидно, немного отличается от того, что я получил ...

Как мне создать таблицу в Impala, чтобы иметь возможность принимать то, что я получил, а также мне просто нужны файлы .parquet или мне также нужно поместить .parquet.crc файлы в?

Или то, что я получил, не подходит для цели?

Я пытался посмотреть документацию Impala для этого бита, но я не думаю, что это покрывает.
Это то, что мне нужно сделать с serde?
Я попытался указать сжатый_кодек как snappy, но это дало те же результаты.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 29 января 2019

Имена файлов не имеют значения, поскольку они не являются какими-то особыми файлами (например, _SUCCESS или .something.crc), они будут считываться Impala как файлы Parquet.Вам не нужны файлы .crc или _SUCCESS.

Вы можете использовать файлы Parquet из внешнего источника в Impala двумя способами:

  1. Первое созданиезатем паркетную таблицу в Impala поместите внешние файлы в каталог, соответствующий таблице.

  2. Создайте каталог, поместите в него внешние файлы и затем создайте так называемый внешний стол в Импале.(Вы также можете поместить туда больше файлов данных позже.)

После помещения внешних файлов в таблицы, вы должны выполнить INVALIDATE METADATA table_name;, чтобы Impala проверила наличие новых файлов.

Синтаксис для создания обычной таблицы Parquet

CREATE TABLE table_name (col_name data_type, ...)
  STORED AS PARQUET;

Синтаксис для создания external Parquet table

CREATE EXTERNAL TABLE table_name (col_name data_type, ...)
  STORED AS PARQUET LOCATION '/path/to/directory';

Выдержка из Обзор таблиц Impala раздел документации:

Физически каждая таблица, которая использует хранилище HDFS, связана с каталогом в HDFS.Табличные данные состоят из всех файлов данных в этом каталоге:

  • Внутренние таблицы управляются Impala и используют каталоги внутри назначенной рабочей области Impala.
  • Внешние таблицы используют произвольную HDFSкаталоги, где файлы данных обычно совместно используются различными компонентами Hadoop.

Выдержка из раздела CREATE TABLE Statement документации:

По умолчанию Impala создает «внутреннюю» таблицу, в которой Impala управляет основными файлами данных для таблицы и физически удаляет файлы данных при удалении таблицы.Если вы укажете предложение EXTERNAL, Impala будет рассматривать таблицу как «внешнюю» таблицу, где файлы данных обычно создаются вне Impala и запрашиваются из их исходного местоположения в HDFS, а Impala оставляет файлы данных на месте, когда вы отбрасываете таблицу.Подробнее о внутренних и внешних таблицах см. Обзор таблиц Impala.

...