现在数据仓库基本上采用Hadoop平台了,那么数据仓库里面元数据的血缘分析的思路有哪些呢
基本上有下面这两种思路:
1、解析hql脚本,通过正则表达式去匹配每一行字符串
2、采用Hadoop自带的语法分析类解析
这里比较建议采用第二种,比较直接简单,因为第一种方式比较复杂,需要考虑场景比较多,容易出现遗漏
Hadoop 自带的类 org.apache.hadoop.hive.ql.tools.LineageInfo
将hql语句通过解析语法tree,获取hive表的源表和目标表,达到血缘分析的目的
但是这个类有一点缺陷就是对于create table xx as 这种hql语句无法解析
我们稍加修改代码就可以解决了
代码如下:
package com.neo.datamanager;
import org.apache.hadoop.hive.ql.lib.*;
import org.apache.hadoop.hive.ql.parse.*;
import java.io.IOException;
import java.util.*;
public class HiveLineageInfo implements NodeProcessor {
// private static final Logger logger = LoggerFactory.getLogger(HiveLineageInfo.class);
/**
* Stores input tables in sql.
*/
TreeSet inputTableList = new TreeSet();
/**
* Stores output tables in sql.