Gibt es eine Hive-Abfrage zum schnellen Auffinden der Tabellengröße (d. H. Anzahl der Zeilen), ohne einen zeitaufwändigen MapReduce-Job zu starten? (Deshalb möchte ich COUNT(*)
vermeiden.)
Ich habe versucht DESCRIBE EXTENDED
, aber das ergab numRows=0
, was offensichtlich nicht korrekt ist.
(Entschuldigung für die Newb-Frage. Ich habe Googling ausprobiert und die Apache.org-Dokumentation ohne Erfolg durchsucht.)
tblproperties gibt die Größe der Tabelle an und kann bei Bedarf nur zum Abrufen dieses Werts verwendet werden.
-- gives all properties
show tblproperties yourTableName
-- show just the raw data size
show tblproperties yourTableName("rawDataSize")
Hier ist der schnelle Befehl
ANALYZE TABLE tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [noscan];
Zum Beispiel, wenn die Tabelle partitioniert ist
Hive> ANALYZE TABLE ops_bc_log PARTITION(day) COMPUTE STATISTICS noscan;
ausgabe ist
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]
OK
Dauer: 5,252 Sekunden
Wie wäre es mit:
hdfs dfs -du -s -h /path/to/table/name
lösung, wenn auch nicht schnell
Wenn die Tabelle partitioniert ist, können wir die Anzahl der Partitionen und die Anzahl (Anzahl der Zeilen) in jeder Partition zählen.
Zum Beispiel: wenn Partitionierung nach Datum (mm-tt-jjjj)
select partition_date, count(*) from <table_name> where <partion_column_name> >= '05-14-2018' group by <partion_column_name>