我目前有以下猪脚本(为简洁起见,列列表被截断):
REGISTER /usr/lib/pig/piggybank.jar;
inputData = LOAD '/data/$date*.{bz2,bz,gz}' USING PigStorage('\\x7F')
PigStorage('\\x7F')
AS (
SITE_ID_COL :int,-- = Item Site ID
META_ID_COL :int,-- = Top Level (meta) category ID
EXTRACT_DATE_COL :chararray,-- = Date for the data points
...
)
SPLIT inputData INTO site0 IF (SITE_ID_COL == 0), site3 IF (SITE_ID_COL == 3), site15 IF (SITE_ID_COL == 15);
STORE site0 INTO 'pigsplit1/0/' USING org.apache.pig.piggybank.storage.MultiStorage('pigsplit1/0/','2', 'bz2', '\\x7F');
STORE site3 INTO 'pigsplit1/3/' USING org.apache.pig.piggybank.storage.MultiStorage('pigsplit1/3/','2', 'bz2', '\\x7F');
STORE site15 INTO 'pigsplit1/15/' USING org.apache.pig.piggybank.storage.MultiStorage('pigsplit1/15/','2', 'bz2', '\\x7F');
它非常适合我想要它做的事情,但实际上至少有 22 个可能的站点 ID,我不确定是否还有更多。我想根据该列动态创建拆分并存储到路径中。最简单的方法是通过 MultiStorage UDF 的两步使用,首先按站点 ID 拆分,然后加载所有这些结果并按日期拆分?这似乎效率低下。我可以通过 GROUP BYs 以某种方式做到这一点吗?似乎我应该能够按站点 ID 分组,然后展平每一行并在其上运行多存储,但我不确定如何将 GROUP 连接到路径中。