Вложенный статический раздел под динамический раздел

Почему в Hive мне не разрешено вложить статический раздел в динамический раздел?

например, ниже разрешено

INSERT OVERWRITE TABLE T PARTITION (ds='2010-03-03', hr)
SELECT key, value, /*ds,*/ hr FROM srcpart WHERE ds is not null and hr>10;

но это не разрешено

INSERT OVERWRITE TABLE T PARTITION (ds, hr = 11)
SELECT key, value, ds/*, hr*/ FROM srcpart WHERE ds is not null and hr=11;

Я считаю, что официальное объяснение на вики-странице (показано ниже) недостаточно. Предпочитайте логическое объяснение или объяснение на нижележащем уровне карты.

SP is a subpartition of a DP: should throw an error because partition column order determins directory hierarchy. We cannot change the hierarchy in DML

1 ответ

Это проблема дизайна Hive ( указана здесь):

Если имеется несколько столбцов разбиения, их порядок является значительным, поскольку это приводит к структуре каталогов в HDFS: partitioned by (ds string, dept int) подразумевает структуру каталогов ds=2009-02-26/dept=2,

В DML или DDL, включающем многораздельную таблицу, если задано подмножество столбцов разделения (статическое), мы должны выдать ошибку, если столбец динамического разделения меньше.

Пример:

create table nzhang_part(a string) partitioned by (ds string, dept int);
insert overwrite nzhang_part (dept=1)
  select a, ds, dept from T
  where dept=1 and ds is not null;
Другие вопросы по тегам