Hive - оператор "Создать таблицу" с командами "выбор запроса" и "разбиение по"

Я хочу создать разделенную таблицу в кусте. Я знаю, что сначала нужно создать структуру таблицы с помощью команды "Создать таблицу... Разделить на", а затем вставить данные в таблицу с помощью команды "Вставить в таблицу"

Но я пытаюсь объединить эти две команды в один запрос, как показано ниже, но он выдает ошибки.

CREATE TABLE test_extract AS
SELECT 
*
FROM master_extract 
PARTITION BY (year string
,month string)
;

Год и месяц - это два отдельных столбца в таблице master_extract.

Есть ли способ добиться чего-то подобного?

1 ответ

Решение

Нет, это невозможно, потому что CreateTableAsSelect(CTAS) имеет ограничения:

The target table cannot be a partitioned table.
The target table cannot be an external table.
The target table cannot be a list bucketing table.

Вы можете создать таблицу отдельно, а затем вставить перезаписать ее.

С тех пор, как этот вопрос был первоначально задан и дан ответ, произошли некоторые изменения. Согласно документации улья: Starting with Hive 3.2.0, CTAS statements can define a partitioning specification for the target table (HIVE-20241).

Вы также можете увидеть соответствующий билет здесь. Он был решен еще в июле 2018 года.

Поэтому, если у вас улей 3.2.0 или выше, вы можете просто сделать

CREATE TABLE test_extract PARTITIONED BY (year string, month string) AS
SELECT 
    col1,
    col2, 
    year,
    month
FROM master_extract
Другие вопросы по тегам