/hive/src/test/java/com/mongodb/hadoop/hive/MongoStorageHandlerTest.java
http://github.com/mongodb/mongo-hadoop · Java · 110 lines · 94 code · 10 blank · 6 comment · 0 complexity · fa8c23e5290235617d83f6b1fbe13c35 MD5 · raw file
- package com.mongodb.hadoop.hive;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.hive.ql.metadata.HiveStoragePredicateHandler;
- import org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc;
- import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc;
- import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
- import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc;
- import org.apache.hadoop.hive.ql.udf.generic.GenericUDFBetween;
- import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPAnd;
- import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPGreaterThan;
- import org.apache.hadoop.hive.serde.serdeConstants;
- import org.apache.hadoop.hive.serde2.SerDeException;
- import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
- import org.junit.Test;
- import java.util.Arrays;
- import java.util.Properties;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertNull;
- public class MongoStorageHandlerTest extends HiveTest {
- private static MongoStorageHandler msh = new MongoStorageHandler();
- @Test
- public void testDecomposePredicate() throws SerDeException {
- BSONSerDe serde = new BSONSerDe();
- Configuration conf = new Configuration();
- Properties tableProperties = new Properties();
- // Set table columns.
- tableProperties.setProperty(
- serdeConstants.LIST_COLUMNS, "id,i,j");
- tableProperties.setProperty(
- serdeConstants.LIST_COLUMN_TYPES, "string,int,int");
- serde.initialize(conf, tableProperties);
- // Build a query.
- // WHERE i > 20
- GenericUDFOPGreaterThan gt = new GenericUDFOPGreaterThan();
- ExprNodeDesc[] children = {
- new ExprNodeColumnDesc(new SimpleMockColumnInfo("i")),
- new ExprNodeConstantDesc(20)
- };
- ExprNodeGenericFuncDesc expr = new ExprNodeGenericFuncDesc(
- TypeInfoFactory.booleanTypeInfo,
- gt,
- Arrays.asList(children));
- HiveStoragePredicateHandler.DecomposedPredicate decomposed =
- msh.decomposePredicate(null, serde, expr);
- assertNull(decomposed.residualPredicate);
- assertEquals(
- expr.getExprString(),
- decomposed.pushedPredicate.getExprString());
- }
- @Test
- public void testDecomposePredicateUnrecognizedOps() throws SerDeException {
- BSONSerDe serde = new BSONSerDe();
- Configuration conf = new Configuration();
- Properties tableProperties = new Properties();
- // Set table columns.
- tableProperties.setProperty(
- serdeConstants.LIST_COLUMNS, "id,i,j");
- tableProperties.setProperty(
- serdeConstants.LIST_COLUMN_TYPES, "string,int,int");
- serde.initialize(conf, tableProperties);
- // Build a query.
- // WHERE i > 20 AND j IS BETWEEN 1 AND 10
- GenericUDFOPGreaterThan gt = new GenericUDFOPGreaterThan();
- ExprNodeDesc[] children = {
- new ExprNodeColumnDesc(new SimpleMockColumnInfo("i")),
- new ExprNodeConstantDesc(20)
- };
- ExprNodeGenericFuncDesc iGt20 = new ExprNodeGenericFuncDesc(
- TypeInfoFactory.booleanTypeInfo,
- gt,
- Arrays.asList(children));
- GenericUDFBetween between = new GenericUDFBetween();
- ExprNodeDesc[] betweenChildren = {
- new ExprNodeConstantDesc(false),
- new ExprNodeColumnDesc(new SimpleMockColumnInfo("j")),
- new ExprNodeConstantDesc(1),
- new ExprNodeConstantDesc(10)
- };
- ExprNodeGenericFuncDesc jBetween1And10 = new ExprNodeGenericFuncDesc(
- TypeInfoFactory.booleanTypeInfo,
- between,
- Arrays.asList(betweenChildren));
- ExprNodeDesc[] exprChildren = {
- iGt20,
- jBetween1And10
- };
- ExprNodeGenericFuncDesc expr = new ExprNodeGenericFuncDesc(
- TypeInfoFactory.booleanTypeInfo,
- new GenericUDFOPAnd(),
- Arrays.asList(exprChildren));
- HiveStoragePredicateHandler.DecomposedPredicate decomposed =
- msh.decomposePredicate(null, serde, expr);
- assertEquals(
- jBetween1And10.getExprString(),
- decomposed.residualPredicate.getExprString());
- assertEquals(
- iGt20.getExprString(),
- decomposed.pushedPredicate.getExprString());
- }
- }