Add macro expansion to Pig Latin
--------------------------------

                 Key: PIG-1793
                 URL: https://issues.apache.org/jira/browse/PIG-1793
             Project: Pig
          Issue Type: New Feature
            Reporter: Richard Ding
            Assignee: Richard Ding
             Fix For: 0.9.0


As production Pig scripts grow longer and longer, Pig Latin has a need to 
integrate standard programming techniques of separation and code sharing 
offered by functions and modules.  A proposal of adding macro expansion to Pig 
Latin is posted here: http://wiki.apache.org/pig/TuringCompletePig

Below is a brief summary of the proposed syntax (and examples):

   * Macro Definition 

The existing DEFINE keyword will be expanded to allow definitions of Pig 
macros. 

*Syntax*

{code}
define <name> (<params>) returns <aliases> {
    <Pig Latin fragment>
};
{code}

*Example*

{code}
define my_macro(A, sortkey) returns C {
    B = filter $A by my_filter(*);
    $C = order B by $sortkey;
}
{code}

   * Macro Expansion 

*Syntax*

{code}
<aliases> = <macro name> (<params>);
{code}

*Example:* Use above macro in a Pig script:

{code}
X = load 'foo' as (user, address, phone);
Y = my_macro(X, user);
store Y into 'bar';
{code}

This script is expanded into the following Pig Latin statements: 

{code}
X = load 'foo' as (user, address, phone);
macro_my_macro_B_1 = filter X by my_filter(*);
Y = order macro_my_macro_B_1 by user;
store Y into 'bar';
{code}

*Notes*

1. Any alias in the macro which isn't visible from outside will be prefixed 
with macro name and suffixed with instance id to avoid namespace collision. 
2. Macro expansion is not a complete replacement for function calls. Recursive 
expansions are not supported.  

   * Macro Import 

The new IMPORT keyword can be used to add macros defined in another Pig Latin 
file.

*Syntax*

{code}
import <Pig Latin file name>;
{code}

*Example*

{code}
import my_macro.pig;
{code}

*Note:* All macro names are in the global namespace. 

-- 
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