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.