/** * Copyright 2011 Nube Technologies * * Licensed 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 co.nubetech.hiho.job; import static org.junit.Assert.assertEquals; import org.apache.hadoop.conf.Configuration; import org.junit.Test; import co.nubetech.hiho.common.HIHOConf; import co.nubetech.hiho.common.HIHOException; import co.nubetech.hiho.mapreduce.lib.db.apache.DBConfiguration; public class TestDBQueryInputJob { @Test public void testPopulateConfigurations() throws HIHOException { Configuration conf = new Configuration(); String[] args = new String[] { "-jdbcDriver", "com.mysql.jdbc.Driver", "-jdbcUrl", "jdbc:mysql://localhost:3306/", "-jdbcUsername", "root", "-jdbcPassword", "root", "-outputPath", "/tmp", "-outputStrategy", "DELIMITED", "-delimiter", "|", "-numberOfMappers", "2", "-inputTableName", "table", "-inputFieldNames", "field1,field2", "-inputOrderBy", "field1", "-inputLoadTo", "pig", "-inputLoadToPath", "/tmp", "-hiveDriver", "org.apache.hadoop.hive.jdbc.HiveDriver", "-hiveUrl", "jdbc:hive://localhost:10000/", "-hiveUsername", "hive", "-hivePassword", "hive", "-hivePartitionBy", "country:string:india", "-hiveIfNotExists", "true", "-hiveTableName", "table", "-hiveSortedBy", "id", "-hiveClusteredBy", "country:2","-inputQuery","select * from student", "-inputBoundingQuery","select min(id), max(id) from student"}; new DBQueryInputJob().populateConfiguration(args, conf); assertEquals("com.mysql.jdbc.Driver", conf.get(DBConfiguration.DRIVER_CLASS_PROPERTY)); assertEquals("jdbc:mysql://localhost:3306/", conf.get(DBConfiguration.URL_PROPERTY)); assertEquals("root", conf.get(DBConfiguration.USERNAME_PROPERTY)); assertEquals("root", conf.get(DBConfiguration.PASSWORD_PROPERTY)); assertEquals("/tmp", conf.get(HIHOConf.INPUT_OUTPUT_PATH)); assertEquals("DELIMITED", conf.get(HIHOConf.INPUT_OUTPUT_STRATEGY)); assertEquals("|", conf.get(HIHOConf.INPUT_OUTPUT_DELIMITER)); assertEquals("2", conf.get(HIHOConf.NUMBER_MAPPERS)); assertEquals("table", conf.get(DBConfiguration.INPUT_TABLE_NAME_PROPERTY)); assertEquals("field1,field2", conf.get(DBConfiguration.INPUT_FIELD_NAMES_PROPERTY)); assertEquals("field1", conf.get(DBConfiguration.INPUT_ORDER_BY_PROPERTY)); assertEquals("pig", conf.get(HIHOConf.INPUT_OUTPUT_LOADTO)); assertEquals("/tmp", conf.get(HIHOConf.INPUT_OUTPUT_LOADTO_PATH)); assertEquals("org.apache.hadoop.hive.jdbc.HiveDriver", conf.get(HIHOConf.HIVE_DRIVER)); assertEquals("jdbc:hive://localhost:10000/", conf.get(HIHOConf.HIVE_URL)); assertEquals("hive", conf.get(HIHOConf.HIVE_USR_NAME)); assertEquals("hive", conf.get(HIHOConf.HIVE_PASSWORD)); assertEquals("country:string:india", conf.get(HIHOConf.HIVE_PARTITION_BY)); assertEquals("true", conf.get(HIHOConf.HIVE_TABLE_OVERWRITE)); assertEquals("table", conf.get(HIHOConf.HIVE_TABLE_NAME)); assertEquals("id", conf.get(HIHOConf.HIVE_SORTED_BY)); assertEquals("country:2", conf.get(HIHOConf.HIVE_CLUSTERED_BY)); assertEquals("select * from student", conf.get(DBConfiguration.INPUT_QUERY)); assertEquals("select min(id), max(id) from student", conf.get(DBConfiguration.INPUT_BOUNDING_QUERY)); } @Test public void testCheckMandatoryConfs() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForDriverClass() throws HIHOException { Configuration conf = new Configuration(); // conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForUrlProperty() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); // conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForUsernameProperty() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); // conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForPasswordProperty() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); // conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForOutputPath() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); // conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForDelimiter() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); // conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_QUERY, "value"); conf.set(DBConfiguration.INPUT_BOUNDING_QUERY, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForInputTableNameAndInputQuery() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); // conf.set(DBConfiguration.INPUT_QUERY, "value"); // conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForHiveLoadToPath() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_QUERY, "value"); conf.set(DBConfiguration.INPUT_BOUNDING_QUERY, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); // conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForHiveDriver() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_QUERY, "value"); conf.set(DBConfiguration.INPUT_BOUNDING_QUERY, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); // conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForHiveUrl() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_QUERY, "value"); conf.set(DBConfiguration.INPUT_BOUNDING_QUERY, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); // conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForHiveOutputTableNameInCaseOfMultiPartition() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_QUERY, "value"); conf.set(DBConfiguration.INPUT_BOUNDING_QUERY, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value:us,india"); // conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } @Test(expected = HIHOException.class) public void testCheckMandatoryConfsForInputBoundingQuery() throws HIHOException { Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "value"); conf.set(DBConfiguration.URL_PROPERTY, "value"); conf.set(DBConfiguration.USERNAME_PROPERTY, "value"); conf.set(DBConfiguration.PASSWORD_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_PATH, "value"); conf.set(HIHOConf.INPUT_OUTPUT_STRATEGY, "DELIMITED"); conf.set(HIHOConf.INPUT_OUTPUT_DELIMITER, "value"); conf.set(DBConfiguration.INPUT_QUERY, "value"); // conf.set(DBConfiguration.INPUT_BOUNDING_QUERY, "value"); conf.set(DBConfiguration.INPUT_TABLE_NAME_PROPERTY, "value"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO, "hive"); conf.set(HIHOConf.INPUT_OUTPUT_LOADTO_PATH, "value"); conf.set(HIHOConf.HIVE_DRIVER, "value"); conf.set(HIHOConf.HIVE_URL, "value"); conf.set(HIHOConf.HIVE_PARTITION_BY, "value:value:us,india"); conf.set(HIHOConf.HIVE_TABLE_NAME, "value"); new DBQueryInputJob().checkMandatoryConfs(conf); } }