/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hive.ql.tool;
import java.util.TreeSet;
import junit.framework.TestCase;
import org.apache.hadoop.hive.ql.tools.LineageInfo;
/**
* TestLineageInfo.
*
*/
public class TestLineageInfo extends TestCase {
/**
* Checks whether the test outputs match the expected outputs.
*
* @param lep
* The LineageInfo extracted from the test
* @param i
* The set of input tables
* @param o
* The set of output tables
*/
private void checkOutput(LineageInfo lep, TreeSet<String> i, TreeSet<String> o) {
if (!i.equals(lep.getInputTableList())) {
fail("Input table not same");
}
if (!o.equals(lep.getOutputTableList())) {
fail("Output table not same");
}
}
public void testSimpleQuery() {
LineageInfo lep = new LineageInfo();
try {
lep.getLineageInfo("INSERT OVERWRITE TABLE dest1 partition (ds = '111') "
+ "SELECT s.* FROM srcpart TABLESAMPLE (BUCKET 1 OUT OF 1) s "
+ "WHERE s.ds='2008-04-08' and s.hr='11'");
TreeSet<String> i = new TreeSet<String>();
TreeSet<String> o = new TreeSet<String>();
i.add("srcpart");
o.add("dest1");
checkOutput(lep, i, o);
} catch (Exception e) {
e.printStackTrace();
fail("Failed");
}
}
public void testSimpleQuery2() {
LineageInfo lep = new LineageInfo();
try {
lep.getLineageInfo("FROM (FROM src select src.key, src.value "
+ "WHERE src.key < 10 UNION ALL FROM src SELECT src.* WHERE src.key > 10 ) unioninput "
+ "INSERT OVERWRITE DIRECTORY '../../../../build/contrib/hive/ql/test/data/warehouse/union.out' "
+ "SELECT unioninput.*");
TreeSet<String> i = new TreeSet<String>();
TreeSet<String> o = new TreeSet<String>();
i.add("src");
checkOutput(lep, i, o);
} catch (Exception e) {
e.printStackTrace();
fail("Failed");
}
}
public void testSimpleQuery3() {
LineageInfo lep = new LineageInfo();
try {
lep.getLineageInfo("FROM (FROM src select src.key, src.value "
+ "WHERE src.key < 10 UNION ALL FROM src1 SELECT src1.* WHERE src1.key > 10 ) unioninput "
+ "INSERT OVERWRITE DIRECTORY '../../../../build/contrib/hive/ql/test/data/warehouse/union.out' "
+ "SELECT unioninput.*");
TreeSet<String> i = new TreeSet<String>();
TreeSet<String> o = new TreeSet<String>();
i.add("src");
i.add("src1");
checkOutput(lep, i, o);
} catch (Exception e) {
e.printStackTrace();
fail("Failed");
}
}
public void testSimpleQuery4() {
LineageInfo lep = new LineageInfo();
try {
lep.getLineageInfo("FROM ( FROM ( FROM src1 src1 SELECT src1.key AS c1, src1.value AS c2 WHERE src1.key > 10 and src1.key < 20) a RIGHT OUTER JOIN ( FROM src2 src2 SELECT src2.key AS c3, src2.value AS c4 WHERE src2.key > 15 and src2.key < 25) b ON (a.c1 = b.c3) SELECT a.c1 AS c1, a.c2 AS c2, b.c3 AS c3, b.c4 AS c4) c SELECT c.c1, c.c2, c.c3, c.c4");
TreeSet<String> i = new TreeSet<String>();
TreeSet<String> o = new TreeSet<String>();
i.add("src1");
i.add("src2");
checkOutput(lep, i, o);
} catch (Exception e) {
e.printStackTrace();
fail("Failed");
}
}
public void testSimpleQuery5() {
LineageInfo lep = new LineageInfo();
try {
lep.getLineageInfo("insert overwrite table x select a.y, b.y "
+ "from a a full outer join b b on (a.x = b.y)");
TreeSet<String> i = new TreeSet<String>();
TreeSet<String> o = new TreeSet<String>();
i.add("a");
i.add("b");
o.add("x");
checkOutput(lep, i, o);
} catch (Exception e) {
e.printStackTrace();
fail("Failed");
}
}
}