蜂巢到蜂巢 ETL

Hive to Hive ETL

我有两个大型 Hive table,比如 TableA 和 TableB(从不同的来源加载)。

这两个 table 具有几乎相同的 table 结构/列,具有相同的分区列,日期存储为字符串。

我需要根据某些(相同的)过滤条件从每个 table 中过滤记录。

这些table中有一些列包含"codes",需要查找它们以得到其对应的"values"。

有八到十个这样的查找 tables,比如说 LookupA、LookupB、LookupC 等,

现在,我需要:

  1. 合并 TableA 和 TableB 中的过滤记录。
  2. 查找查找 table 并将过滤记录中的那些 "codes" 替换为它们各自的 "values"。如果 "code" 或 "value" 在筛选记录或查找 table 中分别不可用,我需要将其替换为零或空字符串
  3. 将筛选记录中的日期从一种格式转换为另一种格式

我是 Hive 的初学者。请告诉我该怎么做。谢谢。

注意:我可以管理到 table 的并集。需要一些有关查找和转换的指导。

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

  1. 你必须创建一个 custom User Defined function(UDF) 来基本上完成查找工作,这意味着你必须在内部创建一个 Java 程序来查找,jar 并添加它蜂巢如下所示:

    添加 JAR /home/ubuntu/lookup.jar

  2. 然后您必须添加包含键值对的查找文件,如下所示:

    添加文件 /home/ubuntu/lookupA;

  3. 然后您必须创建一个临时查找函数,例如

    创建临时函数 getLookupValueA AS 'com.LookupA';

  4. 最后,您必须在 Select 查询中调用此查找函数,这将基本上填充给定查找键的查找值。

    同样的事情可以使用 JOIN 来实现,但这会影响性能。

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

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

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

针对上述问题,请按照以下步骤操作:

  1. 使用联合架构合并两个 tables(架构必须相同)。
  2. 以上场景可以试试pig脚本。 脚本看起来像(jn table A and tableB with lookup table and generate the appropriate columns):
    • a = join TableA by codesA left outer, lookupA by codesA.
    • b = 通过 codesB 左外连接 a,通过 codesB 查找 B。

同样适用于Table B.

假设 codesA 的某些值在查找中没有值 table,则:

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

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

  1. 如果您使用的是 Pig 0.12 或更高版本,您可以使用 ToString(CurrentTime(),'yyyy-MM-dd')

希望能解决您的问题。如有任何疑问,请告诉我。