Hive - оператор Create Table с командами 'select query' и 'partition by'

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

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

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

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

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


person JKC    schedule 09.08.2018    source источник


Ответы (2)


Нет, это невозможно, потому что Create Table As Select (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.

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

person leftjoin    schedule 09.08.2018
comment
Имеет смысл. Спасибо @leftjoin - person JKC; 10.08.2018

С тех пор, как изначально был задан этот вопрос, и на него был дан ответ, произошли некоторые изменения. Согласно документации: 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
person ira    schedule 04.12.2020