| /** |
| * 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.pig.backend.hadoop.accumulo; |
| |
| import java.io.IOException; |
| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Map.Entry; |
| |
| import org.apache.accumulo.core.data.ColumnUpdate; |
| import org.apache.accumulo.core.data.Key; |
| import org.apache.accumulo.core.data.Mutation; |
| import org.apache.accumulo.core.data.Value; |
| import org.apache.accumulo.core.iterators.user.WholeRowIterator; |
| import org.apache.commons.cli.ParseException; |
| import org.apache.pig.data.DataByteArray; |
| import org.apache.pig.data.DataType; |
| import org.apache.pig.data.InternalMap; |
| import org.apache.pig.data.Tuple; |
| import org.apache.pig.data.TupleFactory; |
| import org.junit.Assert; |
| import org.junit.Test; |
| |
| import com.google.common.collect.Lists; |
| import com.google.common.collect.Maps; |
| |
| public class TestAccumuloStorage { |
| |
| @Test |
| public void testWrite1Tuple() throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage(); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(1); |
| t.set(0, "row"); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(0, mutations.size()); |
| } |
| |
| @Test(expected = ClassCastException.class) |
| public void testWriteLiteralAsMap() throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage(); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(2); |
| t.set(0, "row"); |
| t.set(1, "value"); |
| |
| storage.getMutations(t).size(); |
| } |
| |
| @Test(expected = ClassCastException.class) |
| public void testWriteLiteralAsMapWithAsterisk() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage("*"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(2); |
| t.set(0, "row"); |
| t.set(1, "value"); |
| |
| storage.getMutations(t).size(); |
| } |
| |
| @Test |
| public void testWrite2TupleWithColumn() throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(2); |
| t.set(0, "row"); |
| t.set(1, "value"); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(1, colUpdates.size()); |
| |
| ColumnUpdate colUpdate = colUpdates.get(0); |
| Assert.assertTrue("CF not equal", |
| Arrays.equals(colUpdate.getColumnFamily(), "col".getBytes())); |
| Assert.assertTrue("CQ not equal", |
| Arrays.equals(colUpdate.getColumnQualifier(), new byte[0])); |
| Assert.assertTrue("Values not equal", |
| Arrays.equals(colUpdate.getValue(), "value".getBytes())); |
| } |
| |
| @Test |
| public void testWrite2TupleWithColumnQual() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col:qual"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(2); |
| t.set(0, "row"); |
| t.set(1, "value"); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(1, colUpdates.size()); |
| |
| ColumnUpdate colUpdate = colUpdates.get(0); |
| Assert.assertTrue("CF not equal", |
| Arrays.equals(colUpdate.getColumnFamily(), "col".getBytes())); |
| Assert.assertTrue("CQ not equal", Arrays.equals( |
| colUpdate.getColumnQualifier(), "qual".getBytes())); |
| Assert.assertTrue("Values not equal", |
| Arrays.equals(colUpdate.getValue(), "value".getBytes())); |
| } |
| |
| @Test |
| public void testWrite2TupleWithMixedColumns() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage( |
| "col1,col1:qual,col2:qual,col2"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(5); |
| t.set(0, "row"); |
| t.set(1, "value1"); |
| t.set(2, "value2"); |
| t.set(3, "value3"); |
| t.set(4, "value4"); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(4, colUpdates.size()); |
| |
| ColumnUpdate colUpdate = colUpdates.get(0); |
| Assert.assertTrue("CF not equal", |
| Arrays.equals(colUpdate.getColumnFamily(), "col1".getBytes())); |
| Assert.assertTrue("CQ not equal", |
| Arrays.equals(colUpdate.getColumnQualifier(), new byte[0])); |
| Assert.assertTrue("Values not equal", |
| Arrays.equals(colUpdate.getValue(), "value1".getBytes())); |
| |
| colUpdate = colUpdates.get(1); |
| Assert.assertTrue("CF not equal", |
| Arrays.equals(colUpdate.getColumnFamily(), "col1".getBytes())); |
| Assert.assertTrue("CQ not equal", Arrays.equals( |
| colUpdate.getColumnQualifier(), "qual".getBytes())); |
| Assert.assertTrue("Values not equal", |
| Arrays.equals(colUpdate.getValue(), "value2".getBytes())); |
| |
| colUpdate = colUpdates.get(2); |
| Assert.assertTrue("CF not equal", |
| Arrays.equals(colUpdate.getColumnFamily(), "col2".getBytes())); |
| Assert.assertTrue("CQ not equal", Arrays.equals( |
| colUpdate.getColumnQualifier(), "qual".getBytes())); |
| Assert.assertTrue("Values not equal", |
| Arrays.equals(colUpdate.getValue(), "value3".getBytes())); |
| |
| colUpdate = colUpdates.get(3); |
| Assert.assertTrue("CF not equal", |
| Arrays.equals(colUpdate.getColumnFamily(), "col2".getBytes())); |
| Assert.assertTrue("CQ not equal", |
| Arrays.equals(colUpdate.getColumnQualifier(), new byte[0])); |
| Assert.assertTrue("Values not equal", |
| Arrays.equals(colUpdate.getValue(), "value4".getBytes())); |
| } |
| |
| @Test |
| public void testWriteIgnoredExtraColumns() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(3); |
| t.set(0, "row"); |
| t.set(1, "value1"); |
| t.set(2, "value2"); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(1, colUpdates.size()); |
| |
| ColumnUpdate colUpdate = colUpdates.get(0); |
| Assert.assertTrue("CF not equal", |
| Arrays.equals(colUpdate.getColumnFamily(), "col".getBytes())); |
| Assert.assertTrue("CQ not equal", |
| Arrays.equals(colUpdate.getColumnQualifier(), new byte[0])); |
| Assert.assertTrue("Values not equal", |
| Arrays.equals(colUpdate.getValue(), "value1".getBytes())); |
| } |
| |
| @Test |
| public void testWriteIgnoredExtraMap() throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col1"); |
| |
| Map<String, Object> map = Maps.newHashMap(); |
| |
| map.put("mapcol1", "mapval1"); |
| map.put("mapcol2", "mapval2"); |
| map.put("mapcol3", "mapval3"); |
| map.put("mapcol4", "mapval4"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(3); |
| t.set(0, "row"); |
| t.set(1, "value1"); |
| t.set(2, map); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(1, colUpdates.size()); |
| |
| ColumnUpdate update = colUpdates.get(0); |
| Assert.assertEquals("col1", new String(update.getColumnFamily())); |
| Assert.assertEquals("", new String(update.getColumnQualifier())); |
| Assert.assertEquals("value1", new String(update.getValue())); |
| } |
| |
| @Test |
| public void testWriteMultipleColumnsWithNonExpandedMap() |
| throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col1,col2"); |
| |
| Map<String, Object> map = Maps.newHashMap(); |
| |
| map.put("mapcol1", "mapval1"); |
| map.put("mapcol2", "mapval2"); |
| map.put("mapcol3", "mapval3"); |
| map.put("mapcol4", "mapval4"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(3); |
| t.set(0, "row"); |
| t.set(1, "value1"); |
| t.set(2, map); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(2, colUpdates.size()); |
| |
| ColumnUpdate update = colUpdates.get(0); |
| Assert.assertEquals("col1", new String(update.getColumnFamily())); |
| Assert.assertEquals("", new String(update.getColumnQualifier())); |
| Assert.assertEquals("value1", new String(update.getValue())); |
| |
| update = colUpdates.get(1); |
| Assert.assertEquals("col2", new String(update.getColumnFamily())); |
| Assert.assertEquals("", new String(update.getColumnQualifier())); |
| Assert.assertArrayEquals(storage.objToBytes(map, DataType.MAP), |
| update.getValue()); |
| } |
| |
| @Test |
| public void testWriteMultipleColumnsWithExpandedMap() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col1,col2:"); |
| |
| Map<String, Object> map = Maps.newHashMap(); |
| |
| map.put("mapcol1", "mapval1"); |
| map.put("mapcol2", "mapval2"); |
| map.put("mapcol3", "mapval3"); |
| map.put("mapcol4", "mapval4"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(3); |
| t.set(0, "row"); |
| t.set(1, "value1"); |
| t.set(2, map); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(5, colUpdates.size()); |
| |
| ColumnUpdate update = colUpdates.get(0); |
| Assert.assertEquals("col1", new String(update.getColumnFamily())); |
| Assert.assertEquals("", new String(update.getColumnQualifier())); |
| Assert.assertEquals("value1", new String(update.getValue())); |
| |
| Map<Entry<String, String>, String> expectations = Maps.newHashMap(); |
| expectations.put(Maps.immutableEntry("col2", "mapcol1"), "mapval1"); |
| expectations.put(Maps.immutableEntry("col2", "mapcol2"), "mapval2"); |
| expectations.put(Maps.immutableEntry("col2", "mapcol3"), "mapval3"); |
| expectations.put(Maps.immutableEntry("col2", "mapcol4"), "mapval4"); |
| |
| for (int i = 1; i < 5; i++) { |
| update = colUpdates.get(i); |
| Entry<String, String> key = Maps.immutableEntry( |
| new String(update.getColumnFamily()), |
| new String(update.getColumnQualifier())); |
| String value = new String(update.getValue()); |
| Assert.assertTrue("Did not find expected key: " + key, |
| expectations.containsKey(key)); |
| |
| String actual = expectations.remove(key); |
| Assert.assertEquals(value, actual); |
| } |
| |
| Assert.assertTrue("Did not find all expectations", |
| expectations.isEmpty()); |
| } |
| |
| @Test |
| public void testWriteMapWithColFamWithColon() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col:"); |
| |
| Map<String, Object> map = Maps.newHashMap(); |
| |
| map.put("mapcol1", "mapval1"); |
| map.put("mapcol2", "mapval2"); |
| map.put("mapcol3", "mapval3"); |
| map.put("mapcol4", "mapval4"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(2); |
| t.set(0, "row"); |
| t.set(1, map); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(4, colUpdates.size()); |
| |
| Map<Entry<String, String>, String> expectations = Maps.newHashMap(); |
| expectations.put(Maps.immutableEntry("col", "mapcol1"), "mapval1"); |
| expectations.put(Maps.immutableEntry("col", "mapcol2"), "mapval2"); |
| expectations.put(Maps.immutableEntry("col", "mapcol3"), "mapval3"); |
| expectations.put(Maps.immutableEntry("col", "mapcol4"), "mapval4"); |
| |
| for (ColumnUpdate update : colUpdates) { |
| Entry<String, String> key = Maps.immutableEntry( |
| new String(update.getColumnFamily()), |
| new String(update.getColumnQualifier())); |
| String value = new String(update.getValue()); |
| Assert.assertTrue("Did not find expected key: " + key, |
| expectations.containsKey(key)); |
| |
| String actual = expectations.remove(key); |
| Assert.assertEquals(value, actual); |
| } |
| |
| Assert.assertTrue("Did not find all expectations", |
| expectations.isEmpty()); |
| } |
| |
| @Test |
| public void testWriteMapWithColFamWithColonAsterisk() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col:*"); |
| |
| Map<String, Object> map = Maps.newHashMap(); |
| |
| map.put("mapcol1", "mapval1"); |
| map.put("mapcol2", "mapval2"); |
| map.put("mapcol3", "mapval3"); |
| map.put("mapcol4", "mapval4"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(2); |
| t.set(0, "row"); |
| t.set(1, map); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(4, colUpdates.size()); |
| |
| Map<Entry<String, String>, String> expectations = Maps.newHashMap(); |
| expectations.put(Maps.immutableEntry("col", "mapcol1"), "mapval1"); |
| expectations.put(Maps.immutableEntry("col", "mapcol2"), "mapval2"); |
| expectations.put(Maps.immutableEntry("col", "mapcol3"), "mapval3"); |
| expectations.put(Maps.immutableEntry("col", "mapcol4"), "mapval4"); |
| |
| for (ColumnUpdate update : colUpdates) { |
| Entry<String, String> key = Maps.immutableEntry( |
| new String(update.getColumnFamily()), |
| new String(update.getColumnQualifier())); |
| String value = new String(update.getValue()); |
| Assert.assertTrue("Did not find expected key: " + key, |
| expectations.containsKey(key)); |
| |
| String actual = expectations.remove(key); |
| Assert.assertEquals(value, actual); |
| } |
| |
| Assert.assertTrue("Did not find all expectations", |
| expectations.isEmpty()); |
| } |
| |
| @Test |
| public void testWriteMapWithColFamColQualPrefix() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col:qual_*"); |
| |
| Map<String, Object> map = Maps.newHashMap(); |
| |
| map.put("mapcol1", "mapval1"); |
| map.put("mapcol2", "mapval2"); |
| map.put("mapcol3", "mapval3"); |
| map.put("mapcol4", "mapval4"); |
| |
| Tuple t = TupleFactory.getInstance().newTuple(2); |
| t.set(0, "row"); |
| t.set(1, map); |
| |
| Collection<Mutation> mutations = storage.getMutations(t); |
| |
| Assert.assertEquals(1, mutations.size()); |
| |
| Mutation m = mutations.iterator().next(); |
| |
| Assert.assertTrue("Rows not equal", |
| Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes())); |
| |
| List<ColumnUpdate> colUpdates = m.getUpdates(); |
| Assert.assertEquals(4, colUpdates.size()); |
| |
| Map<Entry<String, String>, String> expectations = Maps.newHashMap(); |
| expectations.put(Maps.immutableEntry("col", "qual_mapcol1"), "mapval1"); |
| expectations.put(Maps.immutableEntry("col", "qual_mapcol2"), "mapval2"); |
| expectations.put(Maps.immutableEntry("col", "qual_mapcol3"), "mapval3"); |
| expectations.put(Maps.immutableEntry("col", "qual_mapcol4"), "mapval4"); |
| |
| for (ColumnUpdate update : colUpdates) { |
| Entry<String, String> key = Maps.immutableEntry( |
| new String(update.getColumnFamily()), |
| new String(update.getColumnQualifier())); |
| String value = new String(update.getValue()); |
| Assert.assertTrue(expectations.containsKey(key)); |
| |
| String actual = expectations.remove(key); |
| Assert.assertEquals(value, actual); |
| } |
| |
| Assert.assertTrue("Did not find all expectations", |
| expectations.isEmpty()); |
| } |
| |
| @Test |
| public void testReadSingleKey() throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage(); |
| |
| List<Key> keys = Lists.newArrayList(); |
| List<Value> values = Lists.newArrayList(); |
| |
| keys.add(new Key("1", "", "col1")); |
| values.add(new Value("value1".getBytes())); |
| |
| Key k = new Key("1"); |
| Value v = WholeRowIterator.encodeRow(keys, values); |
| |
| Tuple t = storage.getTuple(k, v); |
| |
| Assert.assertEquals(2, t.size()); |
| |
| Assert.assertEquals("1", t.get(0).toString()); |
| |
| InternalMap map = new InternalMap(); |
| map.put(":col1", new DataByteArray("value1")); |
| |
| Assert.assertEquals(map, t.get(1)); |
| } |
| |
| @Test |
| public void testReadSingleColumn() throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage(); |
| |
| List<Key> keys = Lists.newArrayList(); |
| List<Value> values = Lists.newArrayList(); |
| |
| keys.add(new Key("1", "col1", "cq1")); |
| keys.add(new Key("1", "col1", "cq2")); |
| keys.add(new Key("1", "col1", "cq3")); |
| |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value2".getBytes())); |
| values.add(new Value("value3".getBytes())); |
| |
| Key k = new Key("1"); |
| Value v = WholeRowIterator.encodeRow(keys, values); |
| |
| Tuple t = storage.getTuple(k, v); |
| |
| Assert.assertEquals(2, t.size()); |
| |
| Assert.assertEquals("1", t.get(0).toString()); |
| |
| InternalMap map = new InternalMap(); |
| map.put("col1:cq1", new DataByteArray("value1")); |
| map.put("col1:cq2", new DataByteArray("value2")); |
| map.put("col1:cq3", new DataByteArray("value3")); |
| |
| Assert.assertEquals(map, t.get(1)); |
| } |
| |
| @Test |
| public void testReadMultipleColumnsAggregateColfamsAsterisk() |
| throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage("*"); |
| |
| List<Key> keys = Lists.newArrayList(); |
| List<Value> values = Lists.newArrayList(); |
| |
| keys.add(new Key("1", "col1", "cq1")); |
| keys.add(new Key("1", "col1", "cq2")); |
| keys.add(new Key("1", "col1", "cq3")); |
| keys.add(new Key("1", "col2", "cq1")); |
| keys.add(new Key("1", "col3", "cq1")); |
| keys.add(new Key("1", "col3", "cq2")); |
| |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value2".getBytes())); |
| values.add(new Value("value3".getBytes())); |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value2".getBytes())); |
| |
| Key k = new Key("1"); |
| Value v = WholeRowIterator.encodeRow(keys, values); |
| |
| Tuple t = storage.getTuple(k, v); |
| |
| Assert.assertEquals(2, t.size()); |
| |
| Assert.assertEquals("1", t.get(0).toString()); |
| |
| InternalMap map = new InternalMap(); |
| map.put("col1:cq1", new DataByteArray("value1")); |
| map.put("col1:cq2", new DataByteArray("value2")); |
| map.put("col1:cq3", new DataByteArray("value3")); |
| map.put("col2:cq1", new DataByteArray("value1")); |
| map.put("col3:cq1", new DataByteArray("value1")); |
| map.put("col3:cq2", new DataByteArray("value2")); |
| |
| Assert.assertEquals(map, t.get(1)); |
| } |
| |
| @Test |
| public void testReadMultipleColumnsAggregateColfamsAsteriskEmptyColfam() |
| throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage("*"); |
| |
| List<Key> keys = Lists.newArrayList(); |
| List<Value> values = Lists.newArrayList(); |
| |
| keys.add(new Key("1", "col1", "")); |
| keys.add(new Key("1", "col2", "")); |
| keys.add(new Key("1", "col3", "")); |
| |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value2".getBytes())); |
| values.add(new Value("value3".getBytes())); |
| |
| Key k = new Key("1"); |
| Value v = WholeRowIterator.encodeRow(keys, values); |
| |
| Tuple t = storage.getTuple(k, v); |
| |
| Assert.assertEquals(2, t.size()); |
| |
| Assert.assertEquals("1", t.get(0).toString()); |
| |
| InternalMap map = new InternalMap(); |
| map.put("col1", new DataByteArray("value1")); |
| map.put("col2", new DataByteArray("value2")); |
| map.put("col3", new DataByteArray("value3")); |
| |
| Assert.assertEquals(map, t.get(1)); |
| } |
| |
| @Test |
| public void testReadMultipleColumnsEmptyString() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage(""); |
| |
| List<Key> keys = Lists.newArrayList(); |
| List<Value> values = Lists.newArrayList(); |
| |
| keys.add(new Key("1", "col1", "cq1")); |
| keys.add(new Key("1", "col1", "cq2")); |
| keys.add(new Key("1", "col1", "cq3")); |
| keys.add(new Key("1", "col2", "cq1")); |
| keys.add(new Key("1", "col3", "cq1")); |
| keys.add(new Key("1", "col3", "cq2")); |
| |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value2".getBytes())); |
| values.add(new Value("value3".getBytes())); |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value2".getBytes())); |
| |
| Key k = new Key("1"); |
| Value v = WholeRowIterator.encodeRow(keys, values); |
| |
| Tuple t = storage.getTuple(k, v); |
| |
| Assert.assertEquals(2, t.size()); |
| |
| Assert.assertEquals("1", t.get(0).toString()); |
| |
| InternalMap map = new InternalMap(); |
| map.put("col1:cq1", new DataByteArray("value1")); |
| map.put("col1:cq2", new DataByteArray("value2")); |
| map.put("col1:cq3", new DataByteArray("value3")); |
| map.put("col2:cq1", new DataByteArray("value1")); |
| map.put("col3:cq1", new DataByteArray("value1")); |
| map.put("col3:cq2", new DataByteArray("value2")); |
| |
| Assert.assertEquals(map, t.get(1)); |
| } |
| |
| @Test |
| public void testReadMultipleColumnsNoColfamAggregate() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage(); |
| |
| List<Key> keys = Lists.newArrayList(); |
| List<Value> values = Lists.newArrayList(); |
| |
| keys.add(new Key("1", "col1", "cq1")); |
| keys.add(new Key("1", "col1", "cq2")); |
| keys.add(new Key("1", "col1", "cq3")); |
| keys.add(new Key("1", "col2", "cq1")); |
| keys.add(new Key("1", "col3", "cq1")); |
| keys.add(new Key("1", "col3", "cq2")); |
| |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value2".getBytes())); |
| values.add(new Value("value3".getBytes())); |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value1".getBytes())); |
| values.add(new Value("value2".getBytes())); |
| |
| Key k = new Key("1"); |
| Value v = WholeRowIterator.encodeRow(keys, values); |
| |
| Tuple t = storage.getTuple(k, v); |
| |
| Assert.assertEquals(2, t.size()); |
| |
| Assert.assertEquals("1", t.get(0).toString()); |
| |
| InternalMap map = new InternalMap(); |
| map.put("col1:cq1", new DataByteArray("value1")); |
| map.put("col1:cq2", new DataByteArray("value2")); |
| map.put("col1:cq3", new DataByteArray("value3")); |
| map.put("col2:cq1", new DataByteArray("value1")); |
| map.put("col3:cq1", new DataByteArray("value1")); |
| map.put("col3:cq2", new DataByteArray("value2")); |
| |
| Assert.assertEquals(map, t.get(1)); |
| } |
| |
| @Test |
| public void testReadMultipleScalars() throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage("col1,col3,col5"); |
| |
| List<Key> keys = Lists.newArrayList(); |
| List<Value> values = Lists.newArrayList(); |
| |
| // Filtering by AccumuloInputFormat isn't applied here since we're |
| // shortcircuiting things |
| keys.add(new Key("1", "col1", "")); |
| // keys.add(new Key("1", "col2", "")); |
| keys.add(new Key("1", "col3", "")); |
| // keys.add(new Key("1", "col4", "")); |
| keys.add(new Key("1", "col5", "")); |
| |
| values.add(new Value("value1".getBytes())); |
| // values.add(new Value("value2".getBytes())); |
| values.add(new Value("value3".getBytes())); |
| // values.add(new Value("value4".getBytes())); |
| values.add(new Value("value5".getBytes())); |
| |
| Key k = new Key("1"); |
| Value v = WholeRowIterator.encodeRow(keys, values); |
| |
| Tuple t = storage.getTuple(k, v); |
| |
| Assert.assertEquals(4, t.size()); |
| |
| Assert.assertEquals("1", t.get(0).toString()); |
| |
| Assert.assertEquals("value1", t.get(1).toString()); |
| Assert.assertEquals("value3", t.get(2).toString()); |
| Assert.assertEquals("value5", t.get(3).toString()); |
| } |
| |
| @Test |
| public void testUnsortedColumnList() throws IOException, ParseException { |
| AccumuloStorage storage = new AccumuloStorage("z,a"); |
| |
| List<Key> keys = Lists.newArrayList(); |
| List<Value> values = Lists.newArrayList(); |
| |
| keys.add(new Key("1", "a", "")); |
| keys.add(new Key("1", "z", "")); |
| |
| values.add(new Value("a".getBytes())); |
| values.add(new Value("z".getBytes())); |
| |
| Key k = new Key("1"); |
| Value v = WholeRowIterator.encodeRow(keys, values); |
| |
| Tuple t = storage.getTuple(k, v); |
| |
| Assert.assertEquals(3, t.size()); |
| |
| Assert.assertEquals("z", t.get(1).toString()); |
| Assert.assertEquals("a", t.get(2).toString()); |
| } |
| |
| @Test |
| public void testReadMultipleScalarsAndMaps() throws IOException, |
| ParseException { |
| AccumuloStorage storage = new AccumuloStorage("z,r:,m:2,b:"); |
| |
| List<Key> keys = Lists.newArrayList(); |
| List<Value> values = Lists.newArrayList(); |
| |
| keys.add(new Key("1", "a", "1")); |
| keys.add(new Key("1", "b", "1")); |
| keys.add(new Key("1", "b", "2")); |
| keys.add(new Key("1", "f", "1")); |
| keys.add(new Key("1", "f", "2")); |
| keys.add(new Key("1", "m", "1")); |
| keys.add(new Key("1", "m", "2")); |
| keys.add(new Key("1", "r", "1")); |
| keys.add(new Key("1", "r", "2")); |
| keys.add(new Key("1", "r", "3")); |
| keys.add(new Key("1", "z", "")); |
| |
| values.add(new Value("a1".getBytes())); |
| values.add(new Value("b1".getBytes())); |
| values.add(new Value("b2".getBytes())); |
| values.add(new Value("f1".getBytes())); |
| values.add(new Value("f2".getBytes())); |
| values.add(new Value("m1".getBytes())); |
| values.add(new Value("m2".getBytes())); |
| values.add(new Value("r1".getBytes())); |
| values.add(new Value("r2".getBytes())); |
| values.add(new Value("r3".getBytes())); |
| values.add(new Value("z1".getBytes())); |
| |
| Key k = new Key("1"); |
| Value v = WholeRowIterator.encodeRow(keys, values); |
| |
| Tuple t = storage.getTuple(k, v); |
| |
| Assert.assertEquals(5, t.size()); |
| |
| Assert.assertEquals(new DataByteArray("z1".getBytes()), t.get(1)); |
| |
| HashMap<String, DataByteArray> rMap = new HashMap<String, DataByteArray>(); |
| rMap.put("r:1", new DataByteArray("r1".getBytes())); |
| rMap.put("r:2", new DataByteArray("r2".getBytes())); |
| rMap.put("r:3", new DataByteArray("r3".getBytes())); |
| Assert.assertEquals(rMap, t.get(2)); |
| |
| Assert.assertEquals(new DataByteArray("m2".getBytes()), t.get(3)); |
| |
| HashMap<String, DataByteArray> bMap = new HashMap<String, DataByteArray>(); |
| bMap.put("b:1", new DataByteArray("b1".getBytes())); |
| bMap.put("b:2", new DataByteArray("b2".getBytes())); |
| Assert.assertEquals(bMap, t.get(4)); |
| } |
| |
| } |