Existe-t-il une requête Hive pour trouver rapidement la taille de la table (c'est-à-dire le nombre de lignes) sans lancer un travail MapReduce fastidieux? (C'est pourquoi je veux éviter COUNT(*)
.)
J'ai essayé DESCRIBE EXTENDED
, mais cela a donné numRows=0
qui n'est évidemment pas correct.
(Excuses pour la question newb. J'ai essayé de chercher sur Google et de chercher dans la documentation d'Apache.org sans succès.)
tblproperties donnera la taille de la table et peut être utilisé pour saisir uniquement cette valeur si nécessaire.
-- gives all properties
show tblproperties yourTableName
-- show just the raw data size
show tblproperties yourTableName("rawDataSize")
Voici la commande rapide
ANALYZE TABLE tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [noscan];
Par exemple, si la table est partitionnée
Hive> ANALYZE TABLE ops_bc_log PARTITION(day) COMPUTE STATISTICS noscan;
la sortie est
Partition logdata.ops_bc_log {day = 20140523} stats: [numFiles = 37, numRows = 26095186, totalSize = 654249957, rawDataSize = 58080809507]
Partition logdata.ops_bc_log {day = 20140521} stats: [numFiles = 30, numRows = 21363807, totalSize = 564014889, rawDataSize = 47556570705]
Partition logdata.ops_bc_log {day = 20140524} stats: [numFiles = 35, numRows = 25210367, totalSize = 631424507, rawDataSize = 56083164109]
Partition logdata.ops_bc_log {day = 20140522} stats: [numFiles = 37, numRows = 26295075, totalSize = 657113440, rawDataSize = 58496087068]
D'accord
Temps pris: 5.252 secondes
Comment utiliser:
hdfs dfs -du -s -h /path/to/table/name
solution, mais pas rapide
si la table est partitionnée, nous pouvons compter le nombre de partitions et compter (nombre de lignes) dans chaque partition.
Par exemple :, si partition par date (mm-jj-aaaa)
select partition_date, count(*) from <table_name> where <partion_column_name> >= '05-14-2018' group by <partion_column_name>