у нас есть таблица в Hive 2, если бы oop 2.7 хранилось как OR C с ZLIB.
В одном поле только 25 значений, поэтому мы пытались улучшить нашу производительность с помощью StorageIndexes, Clusterization и BloomFilters, но нам это не удалось.
Можете ли вы помочь нам понять, почему запросы не структурированы и нет отсортированная таблица выполняется быстрее, чем запрос кластеризованной таблицы с фильтром по полю кластеризации.
Вот пример:
Базовая таблица
create table sandbox_mr.profile2099_hdfs ( userid bigint, field_id int, field_boolean_value boolean, field_string_value string, field_int_value int, valid_from date )
STORED AS ORC
LOCATION '/user/dt=2099-12-31'
Два типа улучшений:
CREATE TABLE `mr_metrics.ProfileFieldsShort2099_bloom_full_64buc`(
`userid` bigint,
`field_id` int,
`field_boolean_value` boolean,
`field_string_value` string,
`field_int_value` int,
`valid_from` date)
CLUSTERED BY (
field_id)
SORTED BY (
userid ASC)
INTO 64 BUCKETS
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'hdfs://datalab-hadoop-dwh-stable/user/hive/warehouse/mr_metrics.db/profilefieldsshort2099_bloom_full_64buc'
TBLPROPERTIES (
'orc.bloom.filter.columns'='field_id',
'orc.bloom.filter.fpp'='0.05',
'orc.compress'='ZLIB',
'orc.create.index'='true',
'orc.row.index.stride'='10000',
'orc.stripe.size'='268435456',
'transient_lastDdlTime'='1583947386')
CREATE TABLE `mr_metrics.ProfileFieldsShort2099_cluster`(
`userid` bigint,
`field_id` int,
`field_boolean_value` boolean,
`field_string_value` string,
`field_int_value` int,
`valid_from` date)
CLUSTERED BY (
field_id)
SORTED BY (
userid ASC)
INTO 64 BUCKETS
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'hdfs://datalab-hadoop-dwh-stable/user/hive/warehouse/mr_metrics.db/profilefieldsshort2099_cluster'
TBLPROPERTIES (
'orc.compress'='ZLIB',
'orc.create.index'='true',
'orc.row.index.stride'='10000',
'orc.stripe.size'='268435456',
'transient_lastDdlTime'='1583946796')
Тестирование запросов:
select count(*) from ... where field_id = 50
Результат ProfileFieldsShort2099_bloom_full_64bu c 209,29 с ProfileFieldsShort2099_cluster 183,24 с profile2099_hdfs 31,00 с
Механизм выполнения = tez
Или этот запрос:
* 1023_b_64_b_64 * *1064* *1064* 10бф 1029 * 4485,022 с ProfileFieldsShort2099_cluster 3084.809 с профиль2099_hdfs 1960,737 с