org.apache.hadoop.hive.accumulo.TestLazyAccumuloMap.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.hadoop.hive.accumulo.TestLazyAccumuloMap.java

Source

/*
 * 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.accumulo;

import java.io.DataOutputStream;
import java.io.IOException;

import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.hadoop.hive.accumulo.columns.ColumnEncoding;
import org.apache.hadoop.hive.accumulo.columns.HiveAccumuloMapColumnMapping;
import org.apache.hadoop.hive.serde2.SerDeException;
import org.apache.hadoop.hive.serde2.lazy.LazyFactory;
import org.apache.hadoop.hive.serde2.lazy.LazyInteger;
import org.apache.hadoop.hive.serde2.lazy.LazyString;
import org.apache.hadoop.hive.serde2.lazy.objectinspector.LazyMapObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.junit.Assert;
import org.junit.Test;

/**
 *
 */
public class TestLazyAccumuloMap {

    protected byte[] toBytes(int i) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream out = new DataOutputStream(baos);
        out.writeInt(i);
        out.close();
        return baos.toByteArray();
    }

    @Test
    public void testStringMapWithProjection() throws SerDeException {
        AccumuloHiveRow row = new AccumuloHiveRow("row");

        row.add("cf1", "foo", "bar".getBytes());
        row.add("cf1", "bar", "foo".getBytes());

        row.add("cf2", "foo1", "bar1".getBytes());
        row.add("cf3", "bar1", "foo1".getBytes());

        HiveAccumuloMapColumnMapping mapping = new HiveAccumuloMapColumnMapping("cf1", null, ColumnEncoding.STRING,
                ColumnEncoding.STRING, "column", TypeInfoFactory
                        .getMapTypeInfo(TypeInfoFactory.stringTypeInfo, TypeInfoFactory.stringTypeInfo).toString());

        // Map of Integer to String
        Text nullSequence = new Text("\\N");
        ObjectInspector oi = LazyFactory.createLazyObjectInspector(
                TypeInfoUtils.getTypeInfosFromTypeString("map<string,string>").get(0),
                new byte[] { (byte) 1, (byte) 2 }, 0, nullSequence, false, (byte) 0);

        LazyAccumuloMap map = new LazyAccumuloMap((LazyMapObjectInspector) oi);
        map.init(row, mapping);

        Assert.assertEquals(2, map.getMapSize());

        Object o = map.getMapValueElement(new Text("foo"));
        Assert.assertNotNull(o);
        Assert.assertEquals(new Text("bar"), ((LazyString) o).getWritableObject());

        o = map.getMapValueElement(new Text("bar"));
        Assert.assertNotNull(o);
        Assert.assertEquals(new Text("foo"), ((LazyString) o).getWritableObject());
    }

    @Test
    public void testIntMap() throws SerDeException, IOException {
        AccumuloHiveRow row = new AccumuloHiveRow("row");

        row.add(new Text("cf1"), new Text("1"), "2".getBytes());
        row.add(new Text("cf1"), new Text("2"), "4".getBytes());
        row.add(new Text("cf1"), new Text("3"), "6".getBytes());

        HiveAccumuloMapColumnMapping mapping = new HiveAccumuloMapColumnMapping("cf1", null, ColumnEncoding.STRING,
                ColumnEncoding.STRING, "column", TypeInfoFactory
                        .getMapTypeInfo(TypeInfoFactory.intTypeInfo, TypeInfoFactory.intTypeInfo).toString());

        // Map of Integer to Integer
        Text nullSequence = new Text("\\N");
        ObjectInspector oi = LazyFactory.createLazyObjectInspector(
                TypeInfoUtils.getTypeInfosFromTypeString("map<int,int>").get(0), new byte[] { (byte) 1, (byte) 2 },
                0, nullSequence, false, (byte) 0);

        LazyAccumuloMap map = new LazyAccumuloMap((LazyMapObjectInspector) oi);
        map.init(row, mapping);

        Assert.assertEquals(3, map.getMapSize());

        Object o = map.getMapValueElement(new IntWritable(1));
        Assert.assertNotNull(o);
        Assert.assertEquals(new IntWritable(2), ((LazyInteger) o).getWritableObject());

        o = map.getMapValueElement(new IntWritable(2));
        Assert.assertNotNull(o);
        Assert.assertEquals(new IntWritable(4), ((LazyInteger) o).getWritableObject());

        o = map.getMapValueElement(new IntWritable(3));
        Assert.assertNotNull(o);
        Assert.assertEquals(new IntWritable(6), ((LazyInteger) o).getWritableObject());
    }

    @Test
    public void testBinaryIntMap() throws SerDeException, IOException {
        AccumuloHiveRow row = new AccumuloHiveRow("row");

        row.add(new Text("cf1"), new Text(toBytes(1)), toBytes(2));
        row.add(new Text("cf1"), new Text(toBytes(2)), toBytes(4));
        row.add(new Text("cf1"), new Text(toBytes(3)), toBytes(6));

        HiveAccumuloMapColumnMapping mapping = new HiveAccumuloMapColumnMapping("cf1", null, ColumnEncoding.BINARY,
                ColumnEncoding.BINARY, "column", TypeInfoFactory
                        .getMapTypeInfo(TypeInfoFactory.intTypeInfo, TypeInfoFactory.intTypeInfo).toString());

        // Map of Integer to String
        Text nullSequence = new Text("\\N");
        ObjectInspector oi = LazyFactory.createLazyObjectInspector(
                TypeInfoUtils.getTypeInfosFromTypeString("map<int,int>").get(0), new byte[] { (byte) 1, (byte) 2 },
                0, nullSequence, false, (byte) 0);

        LazyAccumuloMap map = new LazyAccumuloMap((LazyMapObjectInspector) oi);
        map.init(row, mapping);

        Assert.assertEquals(3, map.getMapSize());

        Object o = map.getMapValueElement(new IntWritable(1));
        Assert.assertNotNull(o);
        Assert.assertEquals(new IntWritable(2), ((LazyInteger) o).getWritableObject());

        o = map.getMapValueElement(new IntWritable(2));
        Assert.assertNotNull(o);
        Assert.assertEquals(new IntWritable(4), ((LazyInteger) o).getWritableObject());

        o = map.getMapValueElement(new IntWritable(3));
        Assert.assertNotNull(o);
        Assert.assertEquals(new IntWritable(6), ((LazyInteger) o).getWritableObject());
    }

    @Test
    public void testMixedSerializationMap() throws SerDeException, IOException {
        AccumuloHiveRow row = new AccumuloHiveRow("row");

        row.add(new Text("cf1"), new Text(toBytes(1)), "2".getBytes());
        row.add(new Text("cf1"), new Text(toBytes(2)), "4".getBytes());
        row.add(new Text("cf1"), new Text(toBytes(3)), "6".getBytes());

        HiveAccumuloMapColumnMapping mapping = new HiveAccumuloMapColumnMapping("cf1", null, ColumnEncoding.BINARY,
                ColumnEncoding.STRING, "column", TypeInfoFactory
                        .getMapTypeInfo(TypeInfoFactory.intTypeInfo, TypeInfoFactory.intTypeInfo).toString());

        // Map of Integer to String
        Text nullSequence = new Text("\\N");
        ObjectInspector oi = LazyFactory.createLazyObjectInspector(
                TypeInfoUtils.getTypeInfosFromTypeString("map<int,int>").get(0), new byte[] { (byte) 1, (byte) 2 },
                0, nullSequence, false, (byte) 0);

        LazyAccumuloMap map = new LazyAccumuloMap((LazyMapObjectInspector) oi);
        map.init(row, mapping);

        Assert.assertEquals(3, map.getMapSize());

        Object o = map.getMapValueElement(new IntWritable(1));
        Assert.assertNotNull(o);
        Assert.assertEquals(new IntWritable(2), ((LazyInteger) o).getWritableObject());

        o = map.getMapValueElement(new IntWritable(2));
        Assert.assertNotNull(o);
        Assert.assertEquals(new IntWritable(4), ((LazyInteger) o).getWritableObject());

        o = map.getMapValueElement(new IntWritable(3));
        Assert.assertNotNull(o);
        Assert.assertEquals(new IntWritable(6), ((LazyInteger) o).getWritableObject());
    }

}