We're Moving!

The Vertica Forum is moving to a new OpenText Analytics Database (Vertica) Community.

Join us there to post discussion topics, learn about

product releases, share tips, access the blog, and much more.

Create My New Community Account Now


UNPIVOT functionality — Vertica Forum

UNPIVOT functionality

Hi all!

I created a template/example of UNPIVOT UDFx on C++ for this question on StackOverflow.

Source code here.

Supported data types:

  • boolean
  • all numbers
  • char/varchar/long varchar

Example

Data

 => select * from T;
 BOOL | INT | FLOAT  |  NUM   | CHAR | VCHAR |    DATE
------+-----+--------+--------+------+-------+------------
 t    |  42 | 3.1415 | 9.9900 | @    | text  | 2018-01-01
(1 row)

Unpivot

=> select unpivot(*) over () from T;
  KEY  |         VALUE
-------+-----------------------
 BOOL  | true
 INT   | 42
 FLOAT | 3.1415
 NUM   | 9.9900
 CHAR  | @
 VCHAR | text
 DATE  | UNSUPPORTED DATA TYPE
(7 rows)

=> select unpivot(T.int, T.vchar) over () from T;
  KEY  | VALUE
-------+-------
 INT   | 42
 VCHAR | text
(2 rows)

Comments

  • Looks nice! Two suggestions:
    1) I'd provide for an 'id' column - you can specify a column (or columns) not to be unpivoted.
    2) I'd look to pre-allocate the buffer for the ostringstream so you don't do allocation inside the loop. Probably would improve performance in a measurable way.

  • Hi !

    @Ben_Vandiver
    Thanks for feedback. This function I will hone to shine. I have a couple of ideas for how to improve performance. Also I'm going to add support for all types of data.

    I'd provide for an 'id' column - you can specify a column (or columns) not to be unpivoted.

    Added to the TODO list. Thanks, good idea.

    I'd look to pre-allocate the buffer for the ostringstream.

    Sure. Also I improve data type conversion(I don't like too much if-else blocks inside loop).

Leave a Comment

BoldItalicStrikethroughOrdered listUnordered list
Emoji
Image
Align leftAlign centerAlign rightToggle HTML viewToggle full pageToggle lights
Drop image/file