[ 
https://issues.apache.org/jira/browse/PIG-58?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12566215#action_12566215
 ] 

Alan Gates commented on PIG-58:
-------------------------------

A couple of comments on using #define

1) Why do we need $ in our variables after #define?  In you example you say:

#define CMD `generate_date`

a = load '/data/$CMD';

It seems the second line should be:

a = load '/data/CMD';

People used to using #define in Cpp won't be thinking they need a variable 
designator such as $ in there.

2) How will default values be done? I think the proposal was to have values 
from the command line override any #defines in the script.  If we're going to 
follow the syntax of Cpp we better follow it's semantics as well, else we'll be 
violating the law of least astonishment.  In Cpp #defines are not overridden by 
values supplied at compile time with -D.  Instead, it's done as:

#ifndef X

#define X

#endif

That way if X is provided on the command line via -D it remains, otherwise a 
default value is given.  We could implement #ifndef without bogging down in a 
full #ifdef implementation.

> parameterized Pig scripts
> -------------------------
>
>                 Key: PIG-58
>                 URL: https://issues.apache.org/jira/browse/PIG-58
>             Project: Pig
>          Issue Type: New Feature
>            Reporter: Olga Natkovich
>
> This feature has been requested by several users and would be very useful in 
> conjunction with streaming. The feature would allow pig script to include 
> parameters that are replaced at run time. For instance, if your script needs 
> to run on a daily basis over the data of the previous day, you would be able 
> to use the script and providing a date as a run-time parameter to it.
> Example:
> =======
> Pig script myscript.pig:
> A = load '/data/mydata/%date%';
> B = filter A by $0>'5';
> .....
> Pig command line:
> pig -param date='20080110' myscript.pig
> Proposed interface and implementation:
> Interface:
> =======
> (0) Substitution will be only supported with pig script files.
> (1) Parameters are specified on the command line via -param <param>=<val> 
> construct. Multiple parameters can be specified. They are applied to the 
> script in the order they are specified on the command line
> (2) Default values for the parameters can be specified within the script via 
> decare statement:
> decare <param>=<value>
> (3) Withint the script the parameter will be enclosed in %%. \% can be used 
> te escape.
> Implementation:
> ============
> Use preprocessor to do the substitution. The preprocessor would be invoced by 
> Main before grunt is instanciated and do the following:
> - create a new file in temp location
> - build a hash of parameters from command line and declare statement
> - for each line in the original script
>   if this is a declare line, skip it
>   else for each unescaped pattern %<identifie>% look for a match in the hash. 
> Replace, if found.  Write the line to the temp file.
> - pass the temp file to grunt.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to