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


R UDx and date types — Vertica Forum

R UDx and date types

Hi all,

I am writting a UDTF in Vertica using the R API, and I am struggling with a date column.

The test I am running uses a mock-up table which I have created:

CREATE TABLE  dataset(key VARCHAR, ds DATE,  y FLOAT);

Then I introduce values, and finally, if I do a SELECT ds,y FROM dataset LIMIT 5 I get:

ds          y
2015-09-01  357692.2
2015-09-09  434024.13
2015-09-13  340050.08
2015-09-14  368415.6
2015-09-17  405689.05

Afterwards, I write the following code in R:

myUDx <- function(input.data.frame, parameters.data.frame) {
    # assert that the number of period is defined
    if ( is.null(parameters.data.frame[['parameter1']]) ) {
    stop("NULL value for future parameter1! parameter1 cannot be NULL.")
    } else {
    parameter1 <- parameters.data.frame[['parameter1']]
    }

    wd <- weekdays(as.Date(input.data.frame$ds))
    y <- input.data.frame[,2]*parameter1
    final.output <- data.frame(wd,y)
    return(final.output)
}

myUDxFactory <- function() {
list(name    = myUDx,
    udxtype = c("transform"),
    # Since this is a polymorphic function the intype must be any
    intype  = c("date", "float"),
    outtype = c("date", "float"),
    parametertypecallback=myUDxParameters)
}


myUDxParameters <- function() {
    parameters <- list(datatype = c("int"),
                     length   = c("NA"),
                     scale    = c("NA"),
                     name     = c("parameter1"))
    return(parameters)
}

And I call it using the SQL script:

-- Sales Tax Calculator SQL Test
CREATE OR REPLACE LIBRARY rLib AS '/home/dbadmin/R/weekdays.R' LANGUAGE 'R';
CREATE OR REPLACE TRANSFORM FUNCTION myUDX AS LANGUAGE 'R' NAME 'myUDxFactory' LIBRARY rLib FENCED;

-- Show content
DROP TABLE IF EXISTS forecast;
SELECT key, myUDx(ds, y USING PARAMETERS parameter1=0.5) OVER (PARTITION BY key) FROM dataset;

The error I get is:
vsql:weekdays_call.sql:7: ERROR 3399: Failure in UDx RPC call InvokeProcessPartition(): Error calling processPartition() in User Defined Object [myUDX] at [/data/qb_workspaces/jenkins2/ReleaseBuilds/Grader/REL-9_2_1-x_grader/build/vertica/OSS/UDxFence/RInterface.cpp:1401], error code: 0, message: Exception in processPartitionForR: [Evaluation error: 'origin' must be supplied.]


The problem seems to be in the date data. If I set a stop(paste("class ",class(input.data.frame$ds))) before the crash I get that the class is numeric, ds values are something like 1441065600. instead of a real date like '2015-09-01'.

Does anybody know how to deal with date columns? Or why the values are changing inside of my UDx?
Thanks

Leave a Comment

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