Вложенный статический раздел под динамический раздел
Почему в 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;