Există vreo modalitate de a calcula statisticile pe un tabel de stupi pentru toate partițiile cu o singură comandă de analiză? (Programare, Hadoop, Hive, Statistici De Tabel)

StephenBoesch a intrebat.
a intrebat.

Sintaxa pe care o văd pentru calcularea statisticilor în hive pare să indice că răspunsul la întrebarea din titlu ar fi „nu”:

ANALYZE TABLE [TABLENAME] PARTITION(parcol1=…, partcol2=….) COMPUTE STATISTICS

Cu toate acestea, am vrut să o arunc aici, deoarece este surprinzător faptul că a fost întotdeauna necesară scrierea unui script pentru a itera peste partiții pentru a genera declarațiile pe partiții. În acest moment avem aproximativ o mie de partiții pe acest tabel mic și acesta va crește cu ordine de mărime.

BTW Am încercat următoarele fără a specifica partiția:

hive> analyze table metrics compute statistics;
FAILED: SemanticException [Error 10115]: Table is partitioned and partition specification is needed

3 răspunsuri
msciwoj

Da, puteți.

Cel puțin de la hive v0.13 pe care sunt eu. Încercați doar sintaxa de specificații de partiție fără valori specifice (nu =… biți)

Dacă folosiți FOR COLUMNS, atunci nu puteți din cauza bug-ului: https://issues.apache.org/jira/browse/HIVE-4861

Comentarii

  • OK, am scris cele de mai sus când hive 11 era cel mai recent / cel mai bun. e bine de știut că s-a îmbunătățit în 13 –  > Por StephenBoesch.
  • cine dă downvotes – să aibă puțină decență și să lase măcar un feedback… – -.  > Por msciwoj.
minhas23

Sunt pe cea mai recentă versiune Hive 1.2 și următoarea comandă funcționează foarte bine

hive> analyze table member partition(day) compute statistics noscan;
Partition mobi_mysql.member{day=20150831} stats: [numFiles=7, numRows=-1, totalSize=4735943322, rawDataSize=-1]
Partition mobi_mysql.member{day=20150901} stats: [numFiles=7, numRows=117512, totalSize=19741804, rawDataSize=0]
Partition mobi_mysql.member{day=20150902} stats: [numFiles=7, numRows=-1, totalSize=17734601, rawDataSize=-1]
Partition mobi_mysql.member{day=20150903} stats: [numFiles=7, numRows=-1, totalSize=13091084, rawDataSize=-1]
OK
Time taken: 2.089 seconds

Comentarii

  • ce înseamnă valoarea totalSize? –  > Por paolov.
  • @user55570 Este dimensiunea totală a fișierelor din acea partiție. O puteți verifica cu hadoop fs -ls ${path_to_partition}. Este în bytes. numRows este înșelătoare sau poate fi un bug în acest utilitar –  > Por minhas23.
  • Mulțumesc. M-am gândit că ar trebui să fie reflectat ca rawDataSize. Dacă aceasta este ceea ce înseamnă totalSize, atunci ce ar trebui să fie rawDataSize? –  > Por paolov.
SKP

Conform manualului Hive, dacă nu specificați specificațiile de partiție, statisticile sunt colectate pentru întreaga tabelă,https://cwiki.apache.org/confluence/display/Hive/StatsDev

When the user issues that command, he may or may not specify the partition specs. If the user doesn't specify any partition specs, statistics are gathered for the table as well as all the partitions (if any).

Comentarii

  • Da, văd asta, dar există și acest comentariu în aceeași secțiune: „Atunci când se calculează statisticile pe toate partițiile, coloanele de partiție trebuie totuși să fie listate.” Așadar, aș sugera să includeți partition_columns (dar fără =vals). –  > Por pmhargis.