HBase improvements (when creating a HBase table, the ID-column is not a required parameter, because that's always created).
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/f4d2c97a Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/f4d2c97a Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/f4d2c97a Branch: refs/heads/master Commit: f4d2c97ad3a7fa41934251e6fd727639ed1bd300 Parents: cd755a1 Author: Gerard Dellemann <g.dellem...@quadient.com> Authored: Thu May 31 16:30:20 2018 +0200 Committer: Gerard Dellemann <g.dellem...@quadient.com> Committed: Thu May 31 16:30:20 2018 +0200 ---------------------------------------------------------------------- .../hbase/HBaseCreateTableBuilder.java | 26 ++-------- .../apache/metamodel/hbase/CreateTableTest.java | 52 ++++++++++---------- .../hbase/HBaseUpdateCallbackTest.java | 13 +++-- 3 files changed, 40 insertions(+), 51 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/f4d2c97a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java ---------------------------------------------------------------------- diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java index 138e32b..db4463b 100644 --- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java +++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseCreateTableBuilder.java @@ -18,7 +18,6 @@ */ package org.apache.metamodel.hbase; -import java.util.Iterator; import java.util.Set; import org.apache.metamodel.MetaModelException; @@ -58,7 +57,9 @@ public class HBaseCreateTableBuilder extends AbstractTableCreationBuilder<HBaseU @Override public Table execute() { - checkColumnFamilies(_columnFamilies); + if (_columnFamilies == null || _columnFamilies.size() == 0) { + throw new MetaModelException("Creating a table without columnFamilies"); + } final Table table = getTable(); @@ -71,27 +72,6 @@ public class HBaseCreateTableBuilder extends AbstractTableCreationBuilder<HBaseU } /** - * Check if the new table has columnFamilies and if the ID-column is included. - * Throws a {@link MetaModelException} if a check fails. - * @param columnFamilies - */ - private void checkColumnFamilies(Set<String> columnFamilies) { - if (columnFamilies == null || columnFamilies.size() == 0) { - throw new MetaModelException("Creating a table without columnFamilies"); - } - boolean idColumnFound = false; - final Iterator<String> iterator = columnFamilies.iterator(); - while (!idColumnFound && iterator.hasNext()) { - if (iterator.next().equals(HBaseDataContext.FIELD_ID)) { - idColumnFound = true; - } - } - if (!idColumnFound) { - throw new MetaModelException("ColumnFamily: " + HBaseDataContext.FIELD_ID + " not found"); - } - } - - /** * Set the columnFamilies * @param columnFamilies */ http://git-wip-us.apache.org/repos/asf/metamodel/blob/f4d2c97a/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java ---------------------------------------------------------------------- diff --git a/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java b/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java index 789b4bd..6c39acd 100644 --- a/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java +++ b/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java @@ -18,6 +18,7 @@ */ package org.apache.metamodel.hbase; +import java.io.IOException; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -32,7 +33,7 @@ public class CreateTableTest extends HBaseUpdateCallbackTest { /** * Check if creating table is supported */ - public void testDropTableSupported() { + public void testCreateTableSupported() { if (isConfigured()) { assertTrue(getUpdateCallback().isCreateTableSupported()); } else { @@ -112,30 +113,6 @@ public class CreateTableTest extends HBaseUpdateCallbackTest { } /** - * Create a table without the ID-Column, should throw a MetaModelException - */ - public void testCreateTableWithoutIDColumn() { - if (isConfigured()) { - final HBaseTable table = createHBaseTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR, null); - final LinkedHashMap<HBaseColumn, Object> row = createRow(table, null, CF_FOO, CF_BAR); - final Set<String> columnFamilies = getColumnFamilies(getHBaseColumnsFromRow(row)); - try { - final HBaseCreateTableBuilder hBaseCreateTableBuilder = (HBaseCreateTableBuilder) getUpdateCallback() - .createTable(getSchema(), TABLE_NAME); - - hBaseCreateTableBuilder.setColumnFamilies(columnFamilies); - hBaseCreateTableBuilder.execute(); - fail("Should get an exception that the ID-colum is missing"); - } catch (MetaModelException e) { - assertEquals("ColumnFamily: " + HBaseDataContext.FIELD_ID + " not found", e.getMessage()); - } - } else { - warnAboutANotExecutedTest(getClass().getName(), new Object() { - }.getClass().getEnclosingMethod().getName()); - } - } - - /** * Creating a HBaseClient with the tableName null, should throw a exception */ public void testCreatingTheHBaseClientWithTableNameNull() { @@ -190,6 +167,31 @@ public class CreateTableTest extends HBaseUpdateCallbackTest { } /** + * Goodflow. Create a table without the ID-Column, should work + * @throws IOException + */ + public void testCreateTableWithoutIDColumn() throws IOException { + if (isConfigured()) { + final HBaseTable table = createHBaseTable(TABLE_NAME, null, CF_FOO, CF_BAR, null); + final LinkedHashMap<HBaseColumn, Object> row = createRow(table, null, CF_FOO, CF_BAR); + final Set<String> columnFamilies = getColumnFamilies(getHBaseColumnsFromRow(row)); + try { + final HBaseCreateTableBuilder hBaseCreateTableBuilder = (HBaseCreateTableBuilder) getUpdateCallback() + .createTable(getSchema(), TABLE_NAME); + + hBaseCreateTableBuilder.setColumnFamilies(columnFamilies); + hBaseCreateTableBuilder.execute(); + checkSuccesfullyInsertedTable(); + } catch (Exception e) { + fail("Should not get an exception (that the ID-column is missing)"); + } + } else { + warnAboutANotExecutedTest(getClass().getName(), new Object() { + }.getClass().getEnclosingMethod().getName()); + } + } + + /** * Goodflow. Create a table including the ID-Column (columnFamilies not in constructor), should work */ public void testSettingColumnFamiliesAfterConstrutor() { http://git-wip-us.apache.org/repos/asf/metamodel/blob/f4d2c97a/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java ---------------------------------------------------------------------- diff --git a/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java b/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java index 5085689..a30b7f2 100644 --- a/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java +++ b/hbase/src/test/java/org/apache/metamodel/hbase/HBaseUpdateCallbackTest.java @@ -126,7 +126,7 @@ public abstract class HBaseUpdateCallbackTest extends HBaseTestCase { /** * Create a test HBase table * @param tableName name of the table - * @param idColumn required ID-column + * @param idColumn ID-column, can be set to null to create a table without this column * @param columnFamily1 required columnFamily 1 * @param columnFamily2 required columnFamily 2 * @param columnFamily3 columnFamily 3 is not required and can be used to test errors @@ -136,9 +136,16 @@ public abstract class HBaseUpdateCallbackTest extends HBaseTestCase { final String columnFamily2, final String columnFamily3) { String[] columnNames; ColumnType[] columnTypes; - if (columnFamily3 == null) { + + if (idColumn == null && columnFamily3 == null) { + columnNames = new String[] { columnFamily1, columnFamily2 }; + columnTypes = new ColumnType[] { ColumnType.STRING, ColumnType.STRING }; + } else if (idColumn != null && columnFamily3 == null) { columnNames = new String[] { idColumn, columnFamily1, columnFamily2 }; columnTypes = new ColumnType[] { ColumnType.STRING, ColumnType.STRING, ColumnType.STRING }; + } else if (idColumn == null && columnFamily3 != null) { + columnNames = new String[] { columnFamily1, columnFamily2, columnFamily3 }; + columnTypes = new ColumnType[] { ColumnType.STRING, ColumnType.STRING, ColumnType.STRING }; } else { columnNames = new String[] { idColumn, columnFamily1, columnFamily2, columnFamily3 }; columnTypes = new ColumnType[] { ColumnType.STRING, ColumnType.STRING, ColumnType.STRING, @@ -151,7 +158,7 @@ public abstract class HBaseUpdateCallbackTest extends HBaseTestCase { /** * Creates a map that represents a row * @param table HBaseTable - * @param idColumn required ID-column + * @param idColumn ID-column, can be set to null to create a row without this column * @param columnFamily1 required columnFamily 1 * @param columnFamily2 required columnFamily 1 * @return {@link LinkedHashMap}<{@link HBaseColumn}, {@link Object}>