Запрос куста, чтобы быстро найти размер таблицы (количество строк)

Есть ли запрос на улов, чтобы быстро найти размер таблицы (т.е. количество строк) без запуска трудоемкой работы MapReduce? (Вот почему я хочу избежать COUNT(*).)

Я попробовал DESCRIBE EXTENDED, но это дало numRows=0, что, очевидно, неверно.

(Извиняется за вопрос newb. Я пробовал Googling и искал документацию apache.org без успеха.)

Ответы

Ответ 1

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

-- gives all properties
show tblproperties yourTableName

-- show just the raw data size
show tblproperties yourTableName("rawDataSize")

Ответ 2

Вот краткая команда

ANALYZE TABLE tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [noscan];

Например, если таблица секционирована

 hive> ANALYZE TABLE ops_bc_log PARTITION(day) COMPUTE STATISTICS noscan;

вывод

Статистика раздела logdata.ops_bc_log {day = 20140523}: [numFiles = 37, numRows = 26095186, totalSize = 654249957, rawDataSize = 58080809507]

Partition logdata.ops_bc_log {day = 20140521} stats: [numFiles = 30, numRows = 21363807, totalSize = 564014889, rawDataSize = 47556570705]

Статистика раздела logdata.ops_bc_log {day = 20140524}: [numFiles = 35, numRows = 25210367, totalSize = 631424507, rawDataSize = 56083164109]

Статистика раздела logdata.ops_bc_log {day = 20140522}: [numFiles = 37, numRows = 26295075, totalSize = 657113440, rawDataSize = 58496087068]

OK

Время: 5.252 секунды

Ответ 3

Как насчет использования:

    hdfs dfs -du -s -h /path/to/table/name

Ответ 4

Использовать формат паркета для хранения данных вашей внешней/внутренней таблицы. Затем вы получите более быстрые результаты.

Ответ 5

его хороший вопрос. count() займет много времени для нахождения результата. Но, к сожалению, count() - это единственный способ сделать.

существует альтернативный способ (не сказать альтернативную, но лучшую задержку, чем выше):

задайте свойство установить hive.exec.mode.local.auto = true;

и запустите ту же команду (выберите count (*) из tbl), которая дает лучшую задержку, чем предыдущая.