Улей многоуровневые перегородки и выбери с предложением где - PullRequest
0 голосов
/ 10 октября 2018

У меня есть таблица улья с 2 разделами, и 1-й раздел - это город, а второй раздел - деревня, так что каждый раздел города будет содержать список всех сельских разделов. Что-то вроде ниже

city1/village1
city1/village2
city1/village3
city2/village5
city2/village6

Так что, если мой оператор выбора будет select * from table where village = 'village5', будет ли он искать все разделы в городе 1 и городе 2, прежде чем выводить результат?Или же он увидит файл метастафа куста и ударит только по разделу village5.

1 Ответ

0 голосов
/ 10 октября 2018

Зависит от того, насколько оптимизирована ваша версия Hive.В моей текущей версии (1.1.0) Hive может указывать на конкретный раздел без сканирования верхнего раздела

Вот краткая демонстрация.

create table mydb.partition_test 
(id string)
partitioned by (city string, village string);

INSERT OVERWRITE TABLE mydb.partition_test PARTITION (city,village)
select * from (

select '1', 'city1', 'village1'
union all 
select '1', 'city1', 'village2'
union all 
select '1', 'city1', 'village3'
union all 
select '1', 'city2', 'village5'
union all 
select '1', 'city2', 'village6'
) t;

explain select * from mydb.partition_test where village='village5';

STAGE DEPENDENCIES:
  Stage-0 is a root stage

STAGE PLANS:
  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        TableScan
          alias: partition_test
          filterExpr: (village = 'village5') (type: boolean)
          Statistics: Num rows: 1 Data size: 1 Basic stats: COMPLETE Column stats: PARTIAL
          Select Operator
            expressions: id (type: string), city (type: string), 'village5' (type: string)
            outputColumnNames: _col0, _col1, _col2
            Statistics: Num rows: 1 Data size: 1 Basic stats: COMPLETE Column stats: PARTIAL
            ListSink

Как видно из плана выполнения, он может оценить количество записей для этого конкретного раздела без операции сопоставления, а сканирование таблицы указывает на конкретный раздел.

...