Skip to content
This repository has been archived by the owner on Oct 24, 2019. It is now read-only.
/ hive-udaf-maxrow Public archive

A simple aggregate function (UDAF) for Hive -- like max() but it allows you to refer to additional columns in the maximal row.

Notifications You must be signed in to change notification settings

scribd/hive-udaf-maxrow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

hive-udaf-maxrow

hive-udaf-maxrow is a simple user-defined aggregate function (UDAF) for Hive.

The maxrow() aggregate function is similar to the built-in max() function, but it allows you to refer to additional columns in the maximal row.

Example

For example, given the following data in a Hive table:

idtssomedata
12data-1,2
13data-1,3
14data-1,4
25data-2,5
23data-2,3
24data-2,4
36data-3,6
31data-3,1
34data-3,4

You can query this table using the maxrow() function:

hive> ADD JAR hive-udaf-maxrow.jar;
hive> CREATE TEMPORARY FUNCTION maxrow AS 'com.scribd.hive.udaf.GenericUDAFMaxRow';
hive> SELECT id, maxrow(ts, somedata) FROM sometable GROUP BY id;
idmaxrow
1{"col0":4,"col1":"data-1,4"}
2{"col0":5,"col1":"data-2,5"}
3{"col0":6,"col1":"data-3,6"}

While maxrow() looks only at its first parameter ("ts" in this case) to compute the maximum value, it carries along any additional values ("somedata" in this case).

Since maxrow() returns a "struct" value (see below), you can parse the result with Hive's built-in "dot" notation. For example:

hive> SELECT id, m.col0 as ts, m.col1 as somedata FROM (
          SELECT id, maxrow(ts, somedata) as m FROM sometable GROUP BY id
      ) s;
idtssomedata
14data-1,4
25data-2,5
36data-3,6

Limitations

As can be seen from the example above, there are a couple of limitations due to how Hive UDAFs work:

  • A UDAF can only output a value for a single column. Therefore, maxrow() returns a complex-valued "struct" object.
  • Hive does not provide the UDAF with the name of the columns that are being passed as input to the UDAF. Therefore, maxrow() generates simple names such as "col0", "col1", etc.

Building

To build hive-udaf-maxrow, you need to specify the location of your Hadoop and Hive jar files using the HADOOP_HOME and HIVE_HOME environment variables. The build classpath will include all of the jar files in these directories and and their lib/ subdirectories. For example:

> HADOOP_HOME=/path/to/hadoop HIVE_HOME=/path/to/hive ant

A successful build will create the dist/hive-udaf-maxrow.jar file. You can add this jar file to your Hive session using the ADD JAR command shown above.

About

A simple aggregate function (UDAF) for Hive -- like max() but it allows you to refer to additional columns in the maximal row.

Resources

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages