[ 
https://issues.apache.org/jira/browse/PIG-3939?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Philip (flip) Kromer updated PIG-3939:
--------------------------------------

    Attachment: 0001-PIG-3939-SPRINTF-function-to-format-strings-using-a-.patch

Updated to fix the comments.

Dates in Java are irrevocably sucky, which we knew; the reason your test failed 
is that the millisecond timestamp I had in there was correctly interpreted as 
an epoch offset in UTC but rendered by printf() according to the current 
locale. Given that the %t doohickeys are kinda fiddly anyway, this isn't worth 
working around. I chose to

* document that %t formats exist, 
* but warn people not to use them, and recommend supplying dates as a string 
prepared with ToString(datetime) instead, and
* include the %t in the test format, applying a brief act of violence to make a 
string according to how Java does it. I used full class paths because I don't 
want to import the Date classes at package scope.

The alternative is to just declare the %t formatters as undefined behavior -- 
that is, we don't describe their use except to say "don't use them", but we 
also don't try to check to see if they were used.

> SPRINTF function to format strings using a printf-style template
> ----------------------------------------------------------------
>
>                 Key: PIG-3939
>                 URL: https://issues.apache.org/jira/browse/PIG-3939
>             Project: Pig
>          Issue Type: New Feature
>          Components: impl, internal-udfs
>            Reporter: Philip (flip) Kromer
>            Assignee: Philip (flip) Kromer
>              Labels: builtin, formatted, function, string, udf
>         Attachments: 
> 0001-PIG-3939-SPRINTF-function-to-format-strings-using-a-.patch, 
> 0001-SPRINTF-function-to-format-strings-using-a-printf-st.patch
>
>
> Pig should provide a function to format output using java.util.Formatter 
> (printf-style) templates.
> {code}
> SPRINTF(
>     '%6s|%-8s|%2$,10d %2$8x %3$1TFT%<tT%<tz', 
>     'yay', 1234567, ToMilliSeconds(CurrentTime()))
> --  '   yay|1234567 | 1,234,567   12d687 2014-05-15T08:22:26-0500'
> {code}
> I've written a UDF implementing SPRINTF(...), a variable-arguments function 
> that accepts a string and any number of objects and returns a string. It 
> counts on the java.util.Formatter to do its type-conversion, which works 
> quite well. It doesn't appreciates pig's Dates for datetime formats ('%t'), 
> but is quite happy to use epoch milliseconds for these as shown above.
> Patch forthcoming.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to