首页
学习
活动
专区
圈层
工具
发布

蜂巢ETL
EN

Stack Overflow用户
提问于 2016-05-22 02:57:17
回答 2查看 692关注 0票数 0

我有两个大型的Hive表,比如TableA和TableB (它们是从不同的源加载的)。

这两个表具有几乎相同的表结构/列,具有相同的分区列,这是以字符串形式存储的日期。

我需要根据某些(相同的)筛选标准从每个表中筛选记录。

这些表中有一些包含“代码”的列,需要对这些列进行查找才能得到相应的“值”。

有8到10个这样的查找表,例如,LookupA、LookupB、LookupC等。

现在,我需要:

  1. 对来自TableA和TableB的过滤记录进行合并。
  2. 查找查找表,并将过滤记录中的“代码”替换为各自的“值”。如果“代码”或“值”分别在筛选的记录或查找表中不可用,则需要用零或空字符串替换它。
  3. 将过滤记录中的日期从一种格式转换为另一种格式

我是蜂巢的初学者。请让我知道我能做什么。谢谢。

注:我能应付到桌子合并为止。需要一些关于查找和转换的指导。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-22 09:59:01

基本上,请按照以下步骤进行查找,

  1. 您必须创建一个基本上完成查找工作的custom User Defined function(UDF),这意味着您必须在内部创建一个查找、打包并添加到Hive中的Java,如下所示: 添加JAR /home/ubuntu/lookup.jar
  2. 然后,您必须添加包含键值对的查找文件,如下所示: 添加文件/home/ubuntu/lookupA;
  3. 然后您必须创建一个临时查找函数,如 将临时函数getLookupValueA创建为“com.LookupA”;
  4. 最后,您必须在Select中调用这个查找函数,它将基本上填充给定查找键的查找值。 也可以使用JOIN实现同样的功能,但这会影响性能.

采用联接方法,您可以很好地通过源代码和查找表的查找代码进行连接,如下所示

代码语言:javascript
复制
select a.key,b.lookupvalue
table a join lookuptable b
where a.key=b.lookupKey

现在对于Date Transformation,您可以在Hive中使用Date functions

票数 1
EN

Stack Overflow用户

发布于 2016-12-09 06:26:20

对于上述问题,请执行以下步骤:

  1. 对两个表使用联合架构(架构必须相同)。
  2. 对于上面的场景,您可以尝试pig脚本。脚本将类似于(jn表A和tableB,其中包含查找表并生成适当的列):
    • A=通过左TableA加入codesA,lookupA由codesA加入。
    • B= codesB左侧加入a,codesB加入lookupB。

表B也是如此。

假设codesA的某些值在查找表中没有值,那么:

代码语言:javascript
复制
z = foreach b generate codesA as codesA, valueA is null ? '0' as valuesA.

(将值中的所有空值替换为0)。

  1. 如果您正在使用Pig0.12或更高版本,则可以使用ToString(CurrentTime(),'yyyy-MM-dd')

我希望它能解决你的问题。如果有任何问题,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37370082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档