Не удается выполнить поиск данных из таблицы разделов улья через соединитель OCI HDFS в хранилище объектов

#hdfs #oci-hdfs-connector

Вопрос:

Я попытался создать внешнюю таблицу Hive для хранения объектов OCI, но не смог выполнить поиск данных в таблице разделов hive. В запросе нет выходных select * from table_name limit 10; данных, это проблема только с таблицей разделов улья. Для обычной таблицы без разделов она работает так, как ожидалось.

Ответ №1:

Пожалуйста, следуйте документации здесь, используя разъем HDFS с Spark, чтобы понять предварительные условия. В дополнение к этому способ загрузки данных в секционированные таблицы отличается от обычной несекционированной таблицы. Существует небольшая ручная работа по упоминанию данных раздела, которую можно выполнить, выполнив следующий запрос

ЗАГРУЗИТЕ ДАННЫЕ ПО ПУТИ {местоположение} В ТАБЛИЦУ {таблица разделов} РАЗДЕЛ {имя=значение}

Чтобы лучше понять это, давайте рассмотрим пример файла movies.csv, загруженного в хранилище объектов из приведенной выше документации. (Вы можете выполнить действия, аналогичные описанным ниже, чтобы устранить проблему)

Шаг 1. Создайте внешнюю таблицу hive

 CREATE EXTERNAL TABLE movie_table(
movieId integer, title string, genres string)
partitioned by (pa_month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 'oci://bucket_name@namespace_name/moviepartition';
 

Шаг 2. Загрузите данные из файла, помещенного в хранилище объектов, в секционированную таблицу

 LOAD DATA INPATH 'oci://bucket_name@namespace_name/movicepartition' INTO TABLE movie_table PARTITION {pa_month=202104};
 

Шаг 3. Выполните запрос «ВЫБРАТЬ», чтобы просмотреть содержимое таблицы

 select * from table_name limit 10;
 

Синтаксис для просмотра таблиц и разделов

 show tables;
show paritions table_name;