Apache pig 如何用拉丁语编写子查询?

Apache pig 如何用拉丁语编写子查询?,apache-pig,Apache Pig,我有两个数据文件: range.txt Min Max Name 1 10 a 11 20 b 21 30 c 31 100 d 101 200 e 1 3 40 150 和data.txt Min Max Name 1 10 a 11 20 b 21 30 c 31 100 d 101 200 e 1 3 40 150 我想要的结果是: 1 a ( because 1 <=

我有两个数据文件:

range.txt

Min Max  Name
1    10    a
11   20    b
21   30    c
31   100   d
101  200   e
1
3
40
150
data.txt

Min Max  Name
1    10    a
11   20    b
21   30    c
31   100   d
101  200   e
1
3
40
150
我想要的结果是:

1   a  ( because 1   <= 1   <= 10 )
3   a  ( because 1   <= 3   <= 10 ) 
40  d  ( because 31  <= 40  <= 100 )
150 e  ( because 101 <= 150 <= 200 )

1A(因为1一种非常简单的方法是从range.txt中扩充数据


范围=加载“range.txt”为(最小:长,最大:长,名称:chararray);
m=FOREACH范围生成展平(自定义项(最小值、最大值、名称));
数据=加载'data.txt'作为编号:long;
输出=按$0连接m,按数字连接数据;
转储输出;

输出键,从最小值到最大值的值对,键为数字,值为“name”。 所以110A应该是1A,2A,3A等等。 确保udf返回一个数据包,这样扁平化将为每行提供一个条目


虽然效率不高,但这可能是一个起点。

一个非常简单的方法是从range.txt扩展数据


范围=加载“range.txt”为(最小:长,最大:长,名称:chararray);
m=FOREACH范围生成展平(自定义项(最小值、最大值、名称));
数据=加载'data.txt'作为编号:long;
输出=按$0连接m,按数字连接数据;
转储输出;

输出键,从最小值到最大值的值对,键为数字,值为“name”。 所以110A应该是1A,2A,3A等等。 确保udf返回一个数据包,这样扁平化将为每行提供一个条目


效率不高,但这可能是一个起点。

这是另一种可能的解决方案:

myRepo = LOAD 'range.txt'  USING PigStorage(',') AS (start:long,end:long,location:chararray);
myData = LOAD 'data.txt' AS (col1:long);

myRepoData = cross myRepo, myData;
myRepoData2 = filter myRepoData by col1 >= start and col1 <= end;
myRepoData3 = foreach myRepoData2 generate col1, location;

dump myRepoData3;
myRepo=LOAD'range.txt',使用PigStorage(',')作为(开始:长,结束:长,位置:chararray);
myData=LOAD'data.txt'为(col1:long);
myRepoData=跨myRepo,myData;

myRepoData2=按col1>过滤myRepoData=开始和col1这是另一种可能的解决方案:

myRepo = LOAD 'range.txt'  USING PigStorage(',') AS (start:long,end:long,location:chararray);
myData = LOAD 'data.txt' AS (col1:long);

myRepoData = cross myRepo, myData;
myRepoData2 = filter myRepoData by col1 >= start and col1 <= end;
myRepoData3 = foreach myRepoData2 generate col1, location;

dump myRepoData3;
myRepo=LOAD'range.txt',使用PigStorage(',')作为(开始:长,结束:长,位置:chararray);
myData=LOAD'data.txt'为(col1:long);
myRepoData=跨myRepo,myData;

myRepoData2=按col1>过滤myRepoData=start和col1 range.txt中的key是[begin,end],而key in data.txt是col1,两个键之间的关系不是“相等连接”;而是一个键在另一个键的范围内,我不知道如何连接它们。range.txt中的key是[begin,end],data.txt中的键是col1,两个键之间的关系不是“相等联接”;而是一个键在另一个键的范围内,我不知道如何联接它们。