配置单元到配置单元etl

rslzwgfq  于 2021-06-29  发布在  Hive
关注(0)|答案(2)|浏览(420)

我有两个大的hive表,比如tablea和tableb(它们是从不同的源加载的)。
这两个表具有几乎相同的表结构/列,具有相同的分区列,日期存储为字符串。
我需要根据某些(相同的)筛选条件筛选每个表中的记录。
这些表有一些包含“代码”的列,需要查找这些列以获得相应的“值”。
有8到10个这样的查找表,比如lookupa、lookupb、lookupc等等。,
现在,我需要:
将表a和表B中过滤的记录合并。
对查找表进行查找,并用相应的“值”替换筛选记录中的“代码”。如果“code”或“value”分别在过滤的记录或查找表中不可用,我需要用零或空字符串替换它
将筛选记录中的日期从一种格式转换为另一种格式
我是 hive 的初学者。请告诉我怎么做。谢谢。
注意:我可以管理到表的并集。需要一些关于查找和转换的指导。

tyky79it

tyky79it1#

要基本上进行查找,请遵循以下步骤,
你必须创建一个 custom User Defined function(UDF) 它基本上完成了查找工作,这意味着您必须在内部创建一个java程序进行查找,将其放入jar并添加到hive中,如下所示:
添加jar/home/ubuntu/lookup.jar
然后必须添加包含键值对的查找文件,如下所示:
添加file/home/ubuntu/lookupa;
然后必须创建一个临时查找函数,例如
创建临时函数getlookupvaluea作为'com.lookupa';
最后,您必须在select查询中调用这个lookup函数,它将基本上填充给定查找键的查找值。
使用join也可以实现同样的效果,但这会影响性能。
采用连接方法,您可以很好地通过查找源代码和查找表进行连接,例如

select a.key,b.lookupvalue
table a join lookuptable b
where a.key=b.lookupKey

现在为 Date Transformation ,您可以使用 Date functions 在Hive里。

qxgroojn

qxgroojn2#

对于上述问题,请执行以下步骤:
使用联合架构来联合两个表(架构必须相同)。
对于上面的场景,您可以尝试pig脚本。脚本如下所示(jn table a和table b带有lookup table并生成相应的列):
a=按codesa左外侧联接表a,按codesa查找表a。
b=按codesb左外连接a,按codesb查找b。
类似于表b。
假设codesa的某个值在查找表中没有值,则:

z = foreach b generate codesA as codesA, valueA is null ? '0' as valuesA.

(将用0替换值中的所有空值)。
如果使用pig 0.12或更高版本,则可以使用 ToString(CurrentTime(),'yyyy-MM-dd') 我希望它能解决你的问题。如果有任何问题,请告诉我。

相关问题