猪脚本中的代理键

时间:2014-03-05 14:22:37

标签: hadoop hive apache-pig sqoop

我需要将现有的ETL流转换为Pig脚本,我试图将我的维度保存在hdfs中,以便在加载我的事实表时不需要查看数据库。这里面临问题,我无法为新的维度记录创建代理键。是否有可能在猪中创造代理钥匙?如果是,请告诉我如何创建代理密钥。

由于 Selvam

1 个答案:

答案 0 :(得分:2)

我用来创建猪的代理键的主要机制是使用DataFu哈希方法。它返回MD5或SHA值。只要用于派生哈希的源数据是唯一的,您的哈希也应该是唯一的。

如果我从非唯一来源生成代理键,我通常会使用RANK <alias>创建数据排名,然后将该字段用作部分哈希。



示例1: 从2个连接字段创建的简单哈希。请注意结果中存在重复哈希。那是因为记录&#34; 30000,悉尼,约瑟夫&#34;在源数据集中出现两次。

REGISTER datafu-1.2.0.jar
DEFINE SHA datafu.pig.hash.SHA();
S1 = LOAD 'surrogate_hash' USING PigStorage('|') AS (c1:chararray,c2:chararray,c3:chararray);
S2 = FOREACH S1 GENERATE SHA((chararray)CONCAT(c2,c3)),c1,c2,c3;
dump S2;

结果1:

(291fe24ea7fcc35113d5bf1ea582334f8fe60b7a8028d0a5ae27c207ae2faa1,20000,newyork,john)
(518afaee8ca15c30f21ed0da1b1db89cf01d92ac5416e376c9e529ccbd71550d,30000,sydney,joseph)
(db7bbb6227e6643058bc1a343f60fef4eaa6e5490ff2701a6ec75a1af06a6419,60000,delhi,mike)
(518afaee8ca15c30f21ed0da1b1db89cf01d92ac5416e376c9e529ccbd71550d,30000,sydney,joseph)



示例2: 与示例1相同的基本逻辑,但这次在数据上放置了一个简单的无序等级。这提供了一个唯一的增量字段,可用于创建哈希。请注意,结果中所有散列键都是唯一的。

REGISTER datafu-1.2.0.jar
DEFINE SHA datafu.pig.hash.SHA();
S1 = LOAD 'surrogate_hash' USING PigStorage('|') AS (c1:chararray,c2:chararray,c3:chararray);
S2 = RANK S1;
S3 = FOREACH S2 GENERATE SHA((chararray)CONCAT((chararray)rank_S1,c3)),c1,c2,c3;
dump S3;

结果2:

(3729ce50c28bdfecd94b528de9482d5bd72b07a24a82a47946de7afceea35bee,20000,newyork,john)
(7c0f39f39e5ffff2153634025d87c44550968fde2386f42bfcdb9febebae15de,30000,sydney,joseph)
(777372af10efb2d55fd0e122cfc69be6884395520dbb20b39ec4d53923611728,60000,delhi,mike)
(eb0cffcedab1e5703d85d80684f8f6314c92011b5435b3fa18c03b385254c6bf,30000,sydney,joseph)