2014-08-27 66 views
1

我正在使用猪0.12版本,并且我想使用参考生成动态 IN条件。在猪中动态生成IN条件

在我的猪文件

我有“m_master”关系,当我说DESCRIBE m_master它给了我下面的

m_master: {m_id: chararray,m_name: chararray,in_dx: chararray,rolled_up_name: chararray,match_code: chararray,match0: chararray,flag_ind: chararray} 

现在我要像

UPDATE M_Master SET flag_ind='SE' WHERE Rolled_Up_Name IN (SELECT DISTINCT Rolled_Up_Name FROM M_Master WHERE flag_ind='SE') AND flag_ind='Non SE' 

等于执行一些操作RDBMS查询。

我已经产生了从m_master不同roll_up_names这是refered作为distinct_rollup_names

m_master = FOREACH m_master GENERATE m_id, m_name, in_dx, rolled_up_name, match_code, match0, 
    (
     (
      flag_ind='Non SE' AND rolled_up_name IN (<b>distinct_rollup_names</b>) 
     ) ? 'SE' : flag_ind 
    ) as flag_ind; 

如何,有什么建议请

回答

0

猪不IN子句支持,你是使用IN条件中所产生的关系值期待。自加入对rolled_up_name列m_master,然后更新左侧flag_ind到SE如果非SE,如果右侧flag_ind是SE

--Original m_master 
m_master: {m_id: chararray,m_name: chararray,in_dx: chararray,rolled_up_name: chararray,match_code: chararray,match0: chararray,flag_ind: chararray} 

-- Clone m_master into m_master2 
m_master2 = FOREACH m_master GENERATE m_id, m_name, in_dx, rolled_up_name, match_code, match0, flag_ind; 

-- We are interested only in SE flag_ind (this works as inner query in your question) 
m_master2 = filter m_master2 by flag_ind == 'SE'; 

-- Now join m_master and m_master2 
m_master_self_joined = JOIN m_master BY rolled_up_name LEFT OUTER, m_master2 BY rolled_up_name; 

-- Now pick fields from m_master 
-- When there is a match with m_master2, set flag_ind to SE 
m_master_self_joined2 = FOREACH m_master_self_joined 
         GENERATE 
          m_master::m_id, 
          m_master::m_name, 
          m_master::in_dx, 
          m_master::rolled_up_name, 
          m_master::match_code, 
          m_master::match0, 
          (m_master::m_id == null ? 'Non SE' : 'SE'); 

-- Its possible to have duplicates (if rolled_up_name is not unique), so take uniques 
m_master_self_joined3 = DISTINCT m_master_self_joined2; 

希望这有助于

+1

为您的信息PIG 0.12支持,我已经用它在其他一些场景 – 2014-09-06 07:09:26

+0

谢谢@PrasadKhode,我不知道在0.12版本支持IN。 – 2014-09-06 11:26:34