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