Можно ли преобразовать формат таблицы улья в ORC и сделать его сгруппированным - PullRequest
0 голосов
/ 30 октября 2019

У меня есть набор таблиц улья, которые не в формате ORC и также не сгруппированы. Я хочу изменить их форматы на ORC, а также сделать их сгруппированными. Не удалось найти конкретный ответ по всей сети. Любой ответ или руководство приветствуется. Версия Hive 2.3.5

Или, если это возможно, сделать это в spark (pyspark или scala)?

Самое простое решение - создать новую таблицу, которая объединена в пакеты и находится вФормат ORC затем вставьте в него из старой таблицы. Ищем решение на месте.

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Hive: Используйте промежуточную таблицу для чтения данных без сечения (в формате TEXTFILE), используя следующие команды:

CREATE TABLE staging_table(
    col1 colType, 
    col2 colType, ...
    coln colType
)
STORED AS 
    TEXTFILE
LOCATION 
    '/path/of/input/data';

CREATE TABLE target_table(
    col1 colType, 
    col2 colType, ...
    coln colType
)
CLUSTERED BY(col1) INTO 10 BUCKETS
STORED AS ORC;

INSERT OVERWRITE TABLE table_bucketed
SELECT 
    col1, col2, ..., coln
FROM 
    staging_table;

То же самое можно сделать в **Spark** DataFrame APIs (при условии CSV формат) как это:

df = spark.read.format("csv")
          .option("inferSchema", "true")
          .option("header", "true")
          .option("delimiter", ",")
          .option("path", "/path/of/input/data/")
          .load()

df.write.format("orc")
        .option("path", "/path/of/output/data/")
        .save()
1 голос
/ 30 октября 2019

Создать таблицу с разбивкой и загрузить в нее данные с помощью INSERT OVERWRITE:

CREATE TABLE table_bucketed(col1 string, col2 string)
CLUSTERED BY(col1) INTO 10 BUCKETS
STORED AS ORC;

INSERT OVERWRITE TABLE table_bucketed
select ...
  from table_not_bucketed

См. Также Сортированная таблица с разбивкой.

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