You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pig.apache.org by "Richard Ding (JIRA)" <ji...@apache.org> on 2011/02/05 00:07:30 UTC

[jira] Updated: (PIG-1793) Add macro expansion to Pig Latin

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

Richard Ding updated PIG-1793:
------------------------------

    Attachment: PIG-1793.patch

> 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
>
>         Attachments: PIG-1793.patch
>
>
> 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.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira