Release Notes - Sqoop - Version 1.4.7

** Sub-task
    * [SQOOP-2938] - Mainframe import module extension to support data sets on tape
    * [SQOOP-3055] - SQOOP-3055 MYSQL tests are failing due to the tests ignoring specified username, password and dbname, trying to connect to specified host using "currentUser"
    * [SQOOP-3056] - Add ant ivy report target
    * [SQOOP-3057] - Fix failing 3rd party Oracle tests
    * [SQOOP-3091] - Clean up expected exception logic in tests - part I.
    * [SQOOP-3092] - Clean up expected exception logic in tests - part II.
    * [SQOOP-3141] - Fix Java7 compile issue (getTypeName is only available after Java 8)
    * [SQOOP-3142] - Restore fail messages removed in SQOOP-3092
    * [SQOOP-3143] - Restore fail messages removed in SQOOP-3091

** Bug
    * [SQOOP-1369] - Avro export ignores --columns option
    * [SQOOP-1493] - Add ability to import/export true decimal in Avro instead of serializing it to String
    * [SQOOP-2103] - Not able define Decimal(n,p) data type in map-column-hive option
    * [SQOOP-2264] - Exclude and remove SqoopUserGuide.xml from git repository
    * [SQOOP-2283] - Support usage of --exec and --password-alias
    * [SQOOP-2286] - Ensure Sqoop generates valid avro column names
    * [SQOOP-2295] - Hive import with Parquet should append automatically
    * [SQOOP-2296] - Merge statement incorrectly includes table hints
    * [SQOOP-2297] - Explicitly add zookeeper as a dependency in ivy.xml
    * [SQOOP-2298] - TestAvroImport test case error
    * [SQOOP-2326] - Fix Netezza trunc-string option handling and unnecessary log directory during imports
    * [SQOOP-2339] - Move sub-directory might fail in append mode
    * [SQOOP-2343] - AsyncSqlRecordWriter stucks if any exception is thrown out in its close method
    * [SQOOP-2349] - Transaction isolation level for metadata queries should be mutable
    * [SQOOP-2362] - Add oracle direct mode in list of supported databases
    * [SQOOP-2363] - wrong option for escape character with mysqlimport
    * [SQOOP-2367] - Tests from PostgresqlImportTest can fail on various versions of Hadoop
    * [SQOOP-2370] - Netezza - need to support additional options for full control character handling
    * [SQOOP-2371] - Tests from *LobAvroImportTest might fail
    * [SQOOP-2372] - Imports all tables as parquet will meet a NPE
    * [SQOOP-2381] - Add test for mysql export with --escape-by option
    * [SQOOP-2387] - Sqoop should support importing from table with column names containing some special character
    * [SQOOP-2399] - BigDecimalSplitter java.lang.ArrayIndexOutOfBoundsException
    * [SQOOP-2400] - hive.metastore.sasl.enabled should be set to true for Oozie integration
    * [SQOOP-2406] - Add support for secure mode when importing Parquet files into Hive
    * [SQOOP-2437] - Use hive configuration to connect to secure metastore
    * [SQOOP-2454] - Drop JDK6 support
    * [SQOOP-2470] - Incremental Hive import with append not working after validation check for --hive-import and --import 
    * [SQOOP-2531] - readlink -f not supported on OS X
    * [SQOOP-2535] - Add error handling to HiveConf
    * [SQOOP-2561] - Special Character removal from Column name as avro data results in duplicate column and fails the import
    * [SQOOP-2582] - Query import won't work for parquet
    * [SQOOP-2597] - Missing method AvroSchemaGenerator.generate()
    * [SQOOP-2607] - Direct import from Netezza and encoding
    * [SQOOP-2617] - Log file that is being used for LOB files
    * [SQOOP-2642] - Document ability to specify commas in --map-column-hive option
    * [SQOOP-2651] - Do not dump data on error in TextExportMapper by default
    * [SQOOP-2707] - Upgrade commons-collections to 3.2.2
    * [SQOOP-2712] - Run only one map task attempt during export (second edition)
    * [SQOOP-2723] - Oracle connector not working with lowercase columns
    * [SQOOP-2737] - Cannot import table from Oracle with column with spaces in name
    * [SQOOP-2745] - Using datetime column as a splitter for Oracle no longer works
    * [SQOOP-2746] - Add test case for Oracle incremental import using Timestamp
    * [SQOOP-2747] - Allow customizing test username and password for Oracle tests
    * [SQOOP-2753] - TestSqoopJsonUtil.testGetJsonStringFromMap is depending on Map ordering in JDK
    * [SQOOP-2767] - Test is failing SystemImportTest
    * [SQOOP-2779] - Sqoop metastore doesn't seem to recognize --schema option
    * [SQOOP-2780] - Sqoop 1 unit tests fail with TestIncrementalImport test
    * [SQOOP-2783] - Query import with parquet fails on incompatible schema
    * [SQOOP-2787] - MySql import and export fails with 5.1 server and 5.1.17+ drivers 
    * [SQOOP-2810] - Upgrade to non-snapshot dependency on Avro 1.8.0 as soon as it gets released
    * [SQOOP-2839] - Sqoop import failure due to data member conflict in ORM code for table
    * [SQOOP-2846] - Sqoop Export with update-key failing for avro data file
    * [SQOOP-2847] - Sqoop --incremental + missing parent --target-dir reports success with no data
    * [SQOOP-2863] - Properly escape column names for generated INSERT statements
    * [SQOOP-2864] - ClassWriter chokes on column names containing double quotes
    * [SQOOP-2880] - Provide argument for overriding temporary directory
    * [SQOOP-2884] - Document --temporary-rootdir
    * [SQOOP-2896] - Sqoop exec job fails with SQLException Access denied for user
    * [SQOOP-2909] - Oracle related ImportTest fails after SQOOP-2737
    * [SQOOP-2911] - Fix failing HCatalogExportTest caused by SQOOP-2863
    * [SQOOP-2915] - Fixing Oracle related unit tests
    * [SQOOP-2920] - sqoop performance deteriorates significantly on wide datasets; sqoop 100% on cpu
    * [SQOOP-2936] - Provide Apache Atlas integration for hcatalog based exports
    * [SQOOP-2952] - row key not added into column family using --hbase-bulkload
    * [SQOOP-2971] - OraOop does not close connections properly
    * [SQOOP-2983] - OraOop export has degraded performance with wide tables
    * [SQOOP-2986] - Add validation check for --hive-import and --incremental lastmodified
    * [SQOOP-2990] - Sqoop(oracle) export [updateTableToOracle] with "--update-mode allowinsert" : app fails with java.sql.SQLException: Missing IN or OUT parameter at index
    * [SQOOP-2995] - backward incompatibility introduced by Custom Tool options
    * [SQOOP-2999] - Sqoop ClassNotFoundException (org.apache.commons.lang3.StringUtils) is thrown when executing Oracle direct import map task
    * [SQOOP-3010] - Sqoop should not allow --as-parquetfile with hcatalog jobs or when hive import with create-hive-table is used
    * [SQOOP-3013] - Configuration "tmpjars" is not checked for empty strings before passing to MR
    * [SQOOP-3021] - ClassWriter fails if a column name contains a backslash character
    * [SQOOP-3033] - Sqoop option --skip-dist-cache is not saved as a parameter when saving Sqoop Job
    * [SQOOP-3038] - Sqoop export using --hcatalog with RDBMS reserved word column name results in "null" value
    * [SQOOP-3044] - Add missing ASF license information to .java files
    * [SQOOP-3061] - Sqoop --options-file failed with error "Malformed option in options file" even though the query is correct
    * [SQOOP-3069] - Get OracleExportTest#testUpsertTestExport in line with SQOOP-3066
    * [SQOOP-3071] - Fix OracleManager to apply localTimeZone correctly in case of Date objects too
    * [SQOOP-3072] - Reenable escaping in ImportTest#testProductWithWhiteSpaceImport for proper execution
    * [SQOOP-3074] - Fix Avro import not to fail with Javac errors in case of non UTF-8 locale
    * [SQOOP-3081] - use OracleEscapeUtils.escapeIdentifier OracleUpsertOutputFormat + add compatibility with SQOOP-3066
    * [SQOOP-3083] - Fault injection targets no longer work after SQOOP-2983
    * [SQOOP-3105] - Postgres Tests should clean up after themselves
    * [SQOOP-3123] - Import from oracle using oraoop with map-column-java to avro fails if special characters encounter in table name or column name 
    * [SQOOP-3124] - Fix ordering in column list query of PostgreSQL connector
    * [SQOOP-3127] - Increase timeout in TestClassWriter#testWideTableClassGeneration to avoid flaky test scenarios in the upstream Jenkins
    * [SQOOP-3138] - Netezza Direct Import does not support --columns options
    * [SQOOP-3140] - mapred.map.max.attempts is deprecated. Instead, use mapreduce.map.maxattempts - old property is used by SQOOP-2055
    * [SQOOP-3149] - Sqoop incremental import -  NULL column updates are not pulled into HBase table
    * [SQOOP-3152] - --map-column-hive to support DECIMAL(xx,xx)
    * [SQOOP-3157] - Improve regex introduced in [SQOOP-3152]
    * [SQOOP-3159] - Sqoop (export + --table) with Oracle table_name having '$' fails with error (ORA-00942 or java.lang.NoClassDefFoundError)
    * [SQOOP-3248] - Add missing Apache 2 license information to TestCompilationManager.java PostgresqlExternalTableImportTest.java

** Improvement
    * [SQOOP-816] - Scoop and support for external Hive tables
    * [SQOOP-1281] - Support of glob paths during export 
    * [SQOOP-1904] - support for DB2 XML data type when importing to hdfs
    * [SQOOP-1905] - add --schema option for import-all-tables and list-tables against db2
    * [SQOOP-2647] - Add option for drop-if-exists when using sqoop hcat import.
    * [SQOOP-2795] - Clean up useless code in class TestSqoopJsonUtil
    * [SQOOP-2906] - Optimization of AvroUtil.toAvroIdentifier
    * [SQOOP-2910] - Add capability to Sqoop to require an explicit option to be specified with --split-by for a String column
    * [SQOOP-2913] - Make sqoop fails if user uses --direct connector for case when --direct connector is not available
    * [SQOOP-3027] - Create check/fail fast for Sqoop export with --hcatalog-table <HIVE_VIEW>, as it's not supported by Hive + MR
    * [SQOOP-3028] - Include stack trace in the logging of exceptions in ExportTool
    * [SQOOP-3034] - HBase import should fail fast if using anything other than as-textfile
    * [SQOOP-3037] - Minor convenience feature - add flag to ant test to enable remote debugging
    * [SQOOP-3050] - Create an compile/execution profile which is capable of running all the available test (including the 3rd party tests)
    * [SQOOP-3051] - Remove/delete obsolete profiles from build.xml
    * [SQOOP-3053] - Create a cmd line argument for sqoop.throwOnError and use it through SqoopOptions
    * [SQOOP-3066] - Introduce an option + env variable to enable/disable SQOOP-2737 feature
    * [SQOOP-3068] - Enhance error (tool.ImportTool: Encountered IOException running import job: java.io.IOException: Expected schema) to suggest workaround (--map-column-java)
    * [SQOOP-3090] - Normalize test cases where expect an exception
    * [SQOOP-3135] - Not enough error message for debugging when parameters missing
    * [SQOOP-3136] - Sqoop should work well with not default file systems
    * [SQOOP-3158] - Columns added to Mysql after initial sqoop import, export back to table with same schema fails 
    * [SQOOP-3169] - Evaluate and fix SQLServer Manual tests
    * [SQOOP-3192] - upgrade parquet
    * [SQOOP-3198] - Fix DirectMySQLExportTest and OracleExportTest

** New Feature
    * [SQOOP-1094] - Add Avro support to merge tool
    * [SQOOP-2333] - Sqoop to support Custom options for User Defined Plugins(Tool)
    * [SQOOP-2334] - Sqoop Volume Per Mapper
    * [SQOOP-2609] - Provide Apache Atlas integration for hive and hcatalog based imports

** Task
    * [SQOOP-3080] - Correct default transaction isolation level comment in SqoopOptions

** Test
    * [SQOOP-3174] - Add SQLServer manual tests to 3rd party test suite
    * [SQOOP-3194] - HCatalogExportTest fails because of column escaping problems


Release Notes - Sqoop - Version 1.4.6

** Sub-task
    * [SQOOP-1390] - Import data to HDFS as a set of Parquet files
    * [SQOOP-1393] - Import data from database to Hive as Parquet files
    * [SQOOP-1394] - Export data from HDFS back to an RDMS
    * [SQOOP-1395] - Potential naming conflict in Avro schema
    * [SQOOP-1401] - Fix checkstyle violations for ClassWriter.java
    * [SQOOP-1491] - Remove SqoopAvroRecord
    * [SQOOP-1492] - Move Avro and GenericRecord related common code to AvroUtil
    * [SQOOP-1508] - Add warning when using unsupported compression codec
    * [SQOOP-2284] - Update license file

** Bug
    * [SQOOP-1125] - Out of memory errors when number of records to import < 0.5 * splitSize
    * [SQOOP-1368] - the configuration properties are reset in HBaseImportJob
    * [SQOOP-1387] - Incorrect permissions on manager.d directory can lead to NPE
    * [SQOOP-1400] - Failed to import data using mysql-connector-java-5.1.17.jar
    * [SQOOP-1411] - The number of tasks is not set properly in PGBulkloadExportManager
    * [SQOOP-1412] - Text splitter should also consider NCHAR and NVARCHAR fields
    * [SQOOP-1422] - Integration tests for Oracle connector fail as not using direct option
    * [SQOOP-1423] - hcatalog export with --map-column-java fails
    * [SQOOP-1429] - Fix native characters usage for SqlServer object names
    * [SQOOP-1433] - Oracle direct connector fails with Oracle 12c JDBC driver
    * [SQOOP-1437] - 'Text' reserved word in compliation
    * [SQOOP-1472] - Use Properties.load() method to load property files under conf/manager.d
    * [SQOOP-1474] - Fix usage of StringUtils.repeat method
    * [SQOOP-1490] - Connectors documentation doesn't build on CentOS 5
    * [SQOOP-1494] - Fix generateArvoSchema in DataDrivenImportJob
    * [SQOOP-1519] - Enable HCat/HBase/Accumulo operations with OraOop connection manager
    * [SQOOP-1520] - The table is null when using import into hive as parquet file and query option
    * [SQOOP-1524] - Error to import into hive as textfile on hive 0.13.0
    * [SQOOP-1539] - Empty partition keys and values in multiple partition key hcatalog usage should be validated
    * [SQOOP-1540] - Accumulo unit tests fail with Accumulo 1.6.1 because of conflicts in libthrift libraries
    * [SQOOP-1617] - MySQL fetch-size behavior changed with SQOOP-1400
    * [SQOOP-1627] - Fix Hadoop100 and Hadoop20 profile
    * [SQOOP-1631] - Drop confusing use of --clean-staging-table parameter from PGBulkloadManager
    * [SQOOP-1663] - OraOop test cases are not logging any output
    * [SQOOP-1682] - Test cases *LobAvroImportTest are failing
    * [SQOOP-1684] - Use pre-existing HBase delegation token
    * [SQOOP-1685] - HCatalog integration is not working on JDK8
    * [SQOOP-1759] - TestIncrementalImport fails with NPE on Windows
    * [SQOOP-1764] - Numeric Overflow when getting extent map
    * [SQOOP-1779] - Add support for --hive-database when importing Parquet files into Hive
    * [SQOOP-1826] - NPE in ImportTool.lastModifiedMerge during postgres import
    * [SQOOP-1890] - Properly escape table name in generated queries
    * [SQOOP-1970] - Add warning about trailing whitespace characters when using password file to User guide
    * [SQOOP-2017] - Print out loaded columns and their type in verbose mode
    * [SQOOP-2024] - Hive import doesn't remove target directory in hive
    * [SQOOP-2055] - Run only one map task attempt during export
    * [SQOOP-2057] - Skip delegation token generation flag during hbase import
    * [SQOOP-2128] - HBaseImportJob should close connection from HBaseAdmin to HBase
    * [SQOOP-2130] - BaseSqoopTestCase should use manager.escapeTable instead of directly hardcoding double quotes
    * [SQOOP-2132] - Remove test TestMainframeImportTool.testPrintHelp
    * [SQOOP-2136] - Test case SqlServerUpsertOutputFormatTest is failing
    * [SQOOP-2137] - Sqoop tests and documentation refer to as-avrofile (instead of as-avrodatafile)
    * [SQOOP-2145] - Default Hive home is not being set properly under certain circumstances
    * [SQOOP-2164] - Enhance the Netezza Connector for Sqoop
    * [SQOOP-2170] - MySQL specific tests are not properly cleaning up created tables
    * [SQOOP-2191] - Provide an option automatically choose one mapper when neither primary key is defined nor split by column is provided
    * [SQOOP-2254] - Failed to build release notes
    * [SQOOP-2257] - Parquet target for imports with Hive overwrite option does not work
    * [SQOOP-2263] - Sqoop1 has some files without a copyright header
    * [SQOOP-2264] - Exclude and remove SqoopUserGuide.xml from git repository
    * [SQOOP-2281] - Set overwrite on kite dataset
    * [SQOOP-2282] - Add validation check for --hive-import and --append
    * [SQOOP-2283] - Support usage of --exec and --password-alias
    * [SQOOP-2286] - Ensure Sqoop generates valid avro column names
    * [SQOOP-2290] - java.lang.ArrayIndexOutOfBoundsException thrown when malformed column mapping is provided
    * [SQOOP-2294] - Change to Avro schema name breaks some use cases
    * [SQOOP-2324] - Remove extra license handling for consistency

** Improvement
    * [SQOOP-1330] - Ignore blank newlines in managers.d property files
    * [SQOOP-1391] - Compression codec handling
    * [SQOOP-1392] - Create the temporary directory inside task working dir rather then in tmp
    * [SQOOP-1421] - Automated patch script
    * [SQOOP-1471] - Use Hadoop CredentialProvider API to encyrpt passwords at rest
    * [SQOOP-1489] - Propagate cubrid properties to the test VM
    * [SQOOP-1567] - Auto-Configure JTDS Driver From JDBCUrl
    * [SQOOP-1622] - Copying from staging table should be in single transaction for pg_bulkload connector
    * [SQOOP-1632] - Add support for index organized tables to direct connector
    * [SQOOP-2149] - Update Kite dependency to 1.0.0
    * [SQOOP-2252] - Add default to Avro Schema

** New Feature
    * [SQOOP-1272] - Support importing mainframe sequential datasets
    * [SQOOP-1309] - Expand the Sqoop to support CUBRID database.
    * [SQOOP-1366] - Propose to add Parquet support
    * [SQOOP-1403] - Upsert export for SQL Server
    * [SQOOP-1405] - Add arg to enable SQL Server identity insert on export
    * [SQOOP-1450] - Copy the avro schema file to hdfs for AVRO based import

** Task
    * [SQOOP-1408] - Document SQL Server's --non-resilient arg
    * [SQOOP-1693] - Upgrade Kite SDK to 0.17


Release Notes - Sqoop - Version 1.4.5

** Sub-task
    * [SQOOP-1194] - Make changes to Sqoop build file to enable Netezza third party tests
    * [SQOOP-1323] - Update HCatalog version to 0.13 in Sqoop builds
    * [SQOOP-1324] - Support new hive datatypes in Sqoop hcatalog integration
    * [SQOOP-1325] - Make hcatalog object names escaped during creation so that reserved words are properly processed
    * [SQOOP-1326] - Support multiple static partition keys for better integration support
    * [SQOOP-1363] - Document Hcatalog integration enhancements introduced in SQOOP-1322

** Bug
    * [SQOOP-585] - Bug when sqoop a join of two tables with the same column name with mysql backend
    * [SQOOP-832] - Document --columns argument usage in export tool
    * [SQOOP-1032] - Add the --bulk-load-dir option to support the HBase doBulkLoad function
    * [SQOOP-1107] - Further improve error reporting when exporting malformed data
    * [SQOOP-1117] - when failed to import a non-existing table, the failure information includes NullPointerException
    * [SQOOP-1138] - incremental lastmodified should re-use output directory
    * [SQOOP-1167] - Enhance HCatalog support to allow direct mode connection manager implementations
    * [SQOOP-1170] - Can't import columns with name "public"
    * [SQOOP-1179] - Incorrect warning saying --hive-import was not specified when it was specified
    * [SQOOP-1185] - LobAvroImportTestCase is sensitive to test method order execution
    * [SQOOP-1190] - Class HCatHadoopShims will be removed in HCatalog 0.12
    * [SQOOP-1192] - Add option "--skip-dist-cache" to allow Sqoop not copying jars in %SQOOP_HOME%\lib folder when launched by Oozie and use Oozie share lib
    * [SQOOP-1209] - DirectNetezzaManager fails to find tables from older Netezza system catalogs
    * [SQOOP-1216] - Improve error message on corrupted input while doing export
    * [SQOOP-1224] - Enable use of Oracle Wallets with Oracle Manager
    * [SQOOP-1226] - --password-file option triggers FileSystemClosed exception at end of Oozie action
    * [SQOOP-1227] - Sqoop fails to compile against commons-io higher then 1.4
    * [SQOOP-1228] - Method Configuration#unset is not available on Hadoop < 1.2.0
    * [SQOOP-1239] - Sqoop import code too large error
    * [SQOOP-1246] - HBaseImportJob should add job authtoken only if HBase is secured
    * [SQOOP-1249] - Sqoop HCatalog Import fails with -queries because of validation issues
    * [SQOOP-1250] - Oracle connector is not disabling autoCommit on created connections
    * [SQOOP-1259] - Sqoop on Windows can't run HCatalog/HBase multinode jobs
    * [SQOOP-1260] - HADOOP_MAPRED_HOME should be defaulted correctly
    * [SQOOP-1261] - CompilationManager should add Hadoop 2.x libraries to the classpath under Hadoop 2.x
    * [SQOOP-1268] - Sqoop tarballs do not contain .gitignore and .gitattribute files
    * [SQOOP-1271] - Sqoop hcatalog location should support older bigtop default location also
    * [SQOOP-1273] - Multiple append jobs can easily end up sharing directories
    * [SQOOP-1278] - Allow use of uncommitted isolation for databases that support it as an import option
    * [SQOOP-1279] - Sqoop connection resiliency option breaks older Mysql versions that don't have JDBC 4 methods
    * [SQOOP-1297] - Parameterize the Accumulo version in the build files
    * [SQOOP-1298] - Cannot export to VARBINARY with null value
    * [SQOOP-1302] - Doesn't run the mapper for remaining splits, when split-by ROWNUM
    * [SQOOP-1303] - Can only write to default file system on incremental import
    * [SQOOP-1316] - Example for use of password file in docs is incorrect
    * [SQOOP-1322] - Enhance Sqoop HCatalog Integration to cover features introduced in newer Hive versions
    * [SQOOP-1329] - JDBC connection to Oracle timeout after data import but before hive metadata import
    * [SQOOP-1339] - Synchronize .gitignore files
    * [SQOOP-1353] - Sqoop 1.4.5 release preparation
    * [SQOOP-1358] - Add wallet support for Oracle High performance connector
    * [SQOOP-1359] - Fix avro versions in Sqoop to stop shipping hadoop1  jars with hadoop2
    * [SQOOP-1362] - TestImportJob getContent method doesn't work
    * [SQOOP-1365] - Do not print stack trace when we can't move generated .java file to CWD
    * [SQOOP-1370] - AccumuloUtils can throw NPE when zookeeper or accumulo home is null
    * [SQOOP-1372] - configure-sqoop does not export ZOOKEEPER_HOME
    * [SQOOP-1398] - Upgrade ivy version used to the latest release version
    * [SQOOP-1399] - Fix TestOraOopJdbcUrl test case
    * [SQOOP-1406] - Add license headers
    * [SQOOP-1410] - Update change log for 1.4.5

** Improvement
    * [SQOOP-435] - Avro import should write the Schema to a file
    * [SQOOP-1056] - Implement connection resiliency in Sqoop using pluggable failure handlers
    * [SQOOP-1132] - Print out Sqoop version into log during execution
    * [SQOOP-1137] - Put a stress in the user guide that eval tool is meant for evaluation purpose only
    * [SQOOP-1161] - Generated Delimiter Set Field Should be Static
    * [SQOOP-1172] - Make Sqoop compatible with HBase 0.95+
    * [SQOOP-1203] - Add another default case for finding *_HOME when not explicitly defined
    * [SQOOP-1212] - Do not print usage on wrong command line
    * [SQOOP-1213] - Support reading password files from Amazon S3
    * [SQOOP-1223] - Enhance the password file capability to enable plugging-in custom loaders
    * [SQOOP-1282] - Consider avro files even if they carry no extension
    * [SQOOP-1321] - Add ability to serialize SqoopOption into JobConf
    * [SQOOP-1337] - Doc refactoring - Consolidate documentation of --direct
    * [SQOOP-1341] - Sqoop Export Upsert for MySQL lacks batch support
    * [SQOOP-1373] - Sqoop import schema is locked shows NullPointerException

** New Feature
    * [SQOOP-767] - Add support for Accumulo
    * [SQOOP-1051] - Support direct mode connection managers in a generalized fashion
    * [SQOOP-1197] - Enable Sqoop to build against Hadoop-2.1.0-beta jar files
    * [SQOOP-1287] - Add high performance Oracle connector into Sqoop

** Task
    * [SQOOP-1207] - Allow user to override java source version
    * [SQOOP-1344] - Add documentation for Oracle connector
    * [SQOOP-1408] - Document SQL Server's --non-resilient arg

** Test
    * [SQOOP-1057] - Introduce fault injection framework to test connection resiliency


Changelog - Sqoop - Version 1.4.4 - 07-18-2013

** New Feature
    * [SQOOP-931] - Integrate HCatalog with Sqoop
    * [SQOOP-999] - Support bulk load from HDFS to PostgreSQL using COPY ... FROM
    * [SQOOP-1038] - Add support for composite keys in HBase import

** Improvement
    * [SQOOP-885] - Allow excluding some tables from import-all-tables tools
    * [SQOOP-912] - Add ability to specify --hive-database parameter
    * [SQOOP-914] - Securing passwords in sqoop 1.x
    * [SQOOP-916] - Add an abort validation handler
    * [SQOOP-933] - Properly log SQLExceptions using getNextException() method for chaining exceptions
    * [SQOOP-934] - JDBC Connection can timeout after import but before hive import
    * [SQOOP-937] - Dont generate ORM files for  Direct mode connectors
    * [SQOOP-1140] - Enable overriding username, password and database in DB2 test

** Task
    * [SQOOP-1010] - Change default Hadoop profile to 2.x
    * [SQOOP-1118] - Move PostgreSQL specific MR codes to org.apache.sqoop.mapreduce.posgresql

** Sub-task
    * [SQOOP-838] - Stored procedures: MySQL
    * [SQOOP-839] - Stored procedures: Oracle
    * [SQOOP-847] - Provide direct support
    * [SQOOP-848] - Unit tests for Netezza connector
    * [SQOOP-849] - documentation for netezza connector
    * [SQOOP-949] - Allow Sqoop to build on Windows OS
    * [SQOOP-954] - Create Sqoop runtime scripts to run Sqoop on Windows
    * [SQOOP-955] - Fix Sqoop unit test failures on Windows
    * [SQOOP-962] - Document null string behavior
    * [SQOOP-970] - Explicit delimiter configuration information should be available for exports also
    * [SQOOP-1011] - Allow automatic creation of HCatalog tables
    * [SQOOP-1020] - Fix Hive Unit tests to work in the presence of Hive classes
    * [SQOOP-1050] - Add documentation for HCatalog Integration
    * [SQOOP-1127] - Some database specific types are not properly handled during exports

** Bug
    * [SQOOP-846] - Provide a connector for Netezza appliances
    * [SQOOP-856] - PGBulkLoadExportMapper has an infinite waitFor without any logging in the event of Interrupted exceptions
    * [SQOOP-859] - PostgreSQL: Test cases have hard coded username and password
    * [SQOOP-883] - Remove input directory prior Sqoop import
    * [SQOOP-891] - Sqoop export from S3 to MySQL fails when S3 is not default filesystem.
    * [SQOOP-906] - Sqoop is always calling ConnectionManager.datetimeToQueryString with TIMESTAMP column type
    * [SQOOP-907] - Print out queries executed by Sqoop on mapreduce job side
    * [SQOOP-928] - PostgresqlManager should rollback any pending changes instead of commit when closing connections
    * [SQOOP-929] - Add more Netezza direct mode tests
    * [SQOOP-932] - Netezza direct manager is ignoring --null-*-string arguments
    * [SQOOP-936] - Classwriter should check if columnNames generated are null before accessing them
    * [SQOOP-950] - Can't build package from provided binary artifacts
    * [SQOOP-959] - Use CredentialsUtil.fetchPasswordFromFile in BaseSqoopTool
    * [SQOOP-968] - Cannot build when in a directory with spaces
    * [SQOOP-976] - Incorrect SQL when incremental criteria is text column
    * [SQOOP-979] - MySQL direct connector is not working correct after moving password to credential cache
    * [SQOOP-981] - The --hadoop-home command line parameter is no longer accepted
    * [SQOOP-988] - Validation option should provide some output that validation is being done
    * [SQOOP-992] - Allow to set target java version during compilation
    * [SQOOP-1006] - Update year in the notice file to 2013
    * [SQOOP-1008] - Test TestClassWriter.testNoClassGeneration is failing on JDK7
    * [SQOOP-1027] - Incremental import is not properly escaping table name when loading maximal value
    * [SQOOP-1029] - Oracle export using procedures does not work
    * [SQOOP-1030] - Enable column types Binary and Varbinary parsing in Sqoop for export
    * [SQOOP-1031] - Provide default Java type mapping for MS Sql Datetimeoffset type
    * [SQOOP-1033] - CombineFileInputFormat does not work with paths not on default FS like ASV
    * [SQOOP-1034] - Fix SQL Azure database may return table columns in inconsistent order
    * [SQOOP-1052] - Hive import is not compatible with Avro and SequenceFile but no errors are thrown
    * [SQOOP-1053] - Fix sqoop to work with Hadoop 2.0.4 alpha
    * [SQOOP-1071] - Avro import is failing when columns are starting with underscore
    * [SQOOP-1078] - incremental import from database in direct mode
    * [SQOOP-1083] - Split HBaseImportTest into multiple independent tests
    * [SQOOP-1097] - Export using procedures feature needs fixes for working with mysql
    * [SQOOP-1124] - Direct export to PostgreSQL with PGBulkloadManager fails without explicit port number settings
    * [SQOOP-1129] - PostgreSQL direct test are failing on trunk

** Test
    * [SQOOP-1035] - Add MS Sqoop Connecter tests


Changelog - Sqoop - Version 1.4.3 - 02/20/2012

** New Feature
    * [SQOOP-390] - PostgreSQL connector for direct export with pg_bulkload
    * [SQOOP-540] - Microsoft SQL Connector doesn't support custom schemas
    * [SQOOP-601] - Support custom schemas in PostgreSQL Connector
    * [SQOOP-621] - Requesting support for upsert export with MySQL
    * [SQOOP-724] - Support Table hints in Microsoft SQL Server
    * [SQOOP-749] - Exports Using Stored Procedures (Functions)
    * [SQOOP-767] - Add support for Accumulo

** Improvement
    * [SQOOP-350] - Add support for requiring that a connector be used, otherwise the job should fail
    * [SQOOP-467] - Add support for Oracle BINARY_FLOAT and BINARY_DOUBLE data types
    * [SQOOP-579] - Simple refactoring of org.apache.sqoop.manager.DefaultManagerFactory - extract methods for reuse
    * [SQOOP-580] - Add Open-ended "teardown" routine that is called after the job execution for cleanup
    * [SQOOP-598] - Document NULL substitution string changes for HIVE import
    * [SQOOP-603] - Support small intervals in IntegerSplitter implementation
    * [SQOOP-604] - Easy throttling feature for MySQL exports
    * [SQOOP-635] - Explaining why it's important to specify weird urandom path in Troubleshooting guide
    * [SQOOP-638] - Add an optional, simple and extensible validation framework for sqoop
    * [SQOOP-650] - Add ability to name mapreduce job generated by Sqoop
    * [SQOOP-653] - Add splitter support for N(LONG)(VAR)CHAR Sql type
    * [SQOOP-720] - Improve error handling when exporting malformed text data
    * [SQOOP-726] - Put debugging information into generated SqoopRecord class
    * [SQOOP-804] - Warn if hive special arguments will be used without --hive-import
    * [SQOOP-820] - Escape table name in export job only if it's required by connector
    * [SQOOP-833] - add *.eml "ant eclipse" (IntelliJ import) generated file, to .gitignore

** Task
    * [SQOOP-535] - Support splitting metadata to connector and framework specific
    * [SQOOP-731] - Move HBase tests to manual tests as they depend on unreleased artifacts

** Sub-task
    * [SQOOP-592] - Change repository location on Sqoop website
    * [SQOOP-595] - Change repository location in source code
    * [SQOOP-683] - Documenting sqoop.mysql.export.sleep.ms - easy throttling feature for direct MySQL exports

** Bug
    * [SQOOP-382] - Connection parameters should be used on the mapper
    * [SQOOP-437] - Preparing release requires manual changes to LICENSE.txt file
    * [SQOOP-462] - Sqoop hbase Test Compilation failure.
    * [SQOOP-526] - Unable to resolve maven-scm-providers-standard
    * [SQOOP-578] - sqoop script calls com.cloudera.sqoop.Sqoop instead of org.apache.sqoop.Sqoop
    * [SQOOP-582] - Create a template method for job submission in Export/Import JobBase
    * [SQOOP-585] - Bug when sqoop a join of two tables with the same column name with mysql backend
    * [SQOOP-586] - ant checkstyle has 2 errors
    * [SQOOP-597] - PostgreSQL Manager is incorrectly escaping table names
    * [SQOOP-599] - Import to HBase is not working on secure cluster
    * [SQOOP-600] - HBase table family presence is not working correctly on new HBase versions
    * [SQOOP-607] - In-process Hive CLI driver does not work
    * [SQOOP-609] - 3rd party LobAvroImportTest failures in trunk
    * [SQOOP-615] - Error in Avro generation
    * [SQOOP-616] - HBase import/export is not working on non secure cluster where security is available
    * [SQOOP-617] - User guide is missing argument --fetch-size
    * [SQOOP-628] - Postgres direct import fails on non-lowercase column names
    * [SQOOP-636] - ExportJobTestCase.runExport method does not reuse the existing Configuration and SqoopOptions 
    * [SQOOP-652] - Improve error message generated in  DataDrivenDBInputFormat when no splitter is available
    * [SQOOP-654] - PostgreSQL direct connector is ignoring --null(-input)string and --null(-input)-non-string arguments
    * [SQOOP-657] - ant checkstyle results in errors
    * [SQOOP-687] - org.apache.sqoop.tool.ExportTool.applyOptions invokes applyOutputFormatOptions(..) twice in succession
    * [SQOOP-706] - Sqoop won't compile on Java 7 due to new methods in ResultSet interface
    * [SQOOP-721] - Duplicating rows on export when exporting from compressed files.
    * [SQOOP-725] - Enable HBase tests in sqoop 1
    * [SQOOP-730] - User Guide Update: Section 3 - Sqoop Releases
    * [SQOOP-741] - The OracleConnect getTables() implementation needs to restrict tables to current user
    * [SQOOP-796] - Unable to use new Hadoop environment variables
    * [SQOOP-808] - SQLExceptions From Batched Exports Aren't Very Helpful
    * [SQOOP-818] - Missing method setConnManager(Lcom/cloudera/sqoop/manager/ConnManager;)V in ExportJobContContext breaks MS SQL Connector
    * [SQOOP-821] - Hadoop has changed logic for job id in LocalJobRunner that breaks Lob* tests
    * [SQOOP-824] - Sqoop code generation in 'update' export mode incompatible with '--columns' option
    * [SQOOP-825] - Warning for incorrect usage of hive parameters is not checking HIVE_HOME correctly
    * [SQOOP-829] - Error Messages For --map-column-java Should Be More Useful
    * [SQOOP-830] - HBase import formatting BigDecimal inconsistently
    * [SQOOP-840] - Inconsistent java generics declaration for exportwriter classes
    * [SQOOP-846] - Provide a connector for Netezza appliances
    * [SQOOP-853] - sqoop list-tables isn't returning the tables that have custom schemas
    * [SQOOP-854] - pg_bulkload: Return value of pg_bulkload utility is being ignored
    * [SQOOP-855] - pg_bulkload: NullPointerException will be thrown if user specified invalid path the binary
    * [SQOOP-860] - NullPointerException when running procedure export against old database
    * [SQOOP-862] - Hbase import fails if there is a row where all columns are null
    * [SQOOP-870] - Allow Sqoop to import row key column into HBase
    * [SQOOP-901] - Allow user to override hardcoded boolean strings in direct PostgreSQL connector

** Test
    * [SQOOP-606] - Increase unit test timeout


Changelog - Sqoop - Version 1.4.2 - 08/07/2012

** New Feature
    * [SQOOP-439] - Released artifacts should embrace unwritten naming policy
    * [SQOOP-444] - Support incremental import for free form queries

** Improvement
    * [SQOOP-391] - Dependencies should use released versions of Apache Hadoop, HBase, and ZooKeeper
    * [SQOOP-416] - Allow code-generation arguments with Avro imports
    * [SQOOP-436] - The --verbose option should enable verbose logging for MapReduce jobs as well
    * [SQOOP-438] - allow sourcing of sqoop-env.sh to set various environment variables
    * [SQOOP-440] - Rename CHANGES.txt to CHANGELOG.txt
    * [SQOOP-442] - Ant target mvn-install is generating pom with dependencies on cloudera version of Hadoop
    * [SQOOP-443] - Calling sqoop with hive import is not working multiple times due to  kept output directory
    * [SQOOP-447] - Use release version of Apache Hadoop 0.23.1 in build
    * [SQOOP-459] - Remove redundant steps in compatibility tests: verifyReadback() method
    * [SQOOP-461] - Sqoop User Guide's troubleshooting section should include Oracle Connection Errors
    * [SQOOP-463] - Sqoop User Guide's troubleshooting section should explain how to override the column mapping when importing a table from MySQL into Hive
    * [SQOOP-464] - Warn when user is importing data into /user/hive/warehouse with flag --hive-import
    * [SQOOP-465] - BLOB support for Avro import
    * [SQOOP-483] - Allow target dir to be set to a different name than table name for hive import
    * [SQOOP-484] - Update troubleshooting guide section about MySQL and TINYINT(1) columns
    * [SQOOP-487] - InformationSchemaManager.getPrimaryKeyQuery can take a very long time for large mysql table with partitions
    * [SQOOP-510] - Improve the error message for bad connector files
    * [SQOOP-522] - Move  printing error "ERROR orm.CompilationManager: Could not rename" to DEBUG
    * [SQOOP-529] - Enforce usage of --driver and --connection-manager parameters
    * [SQOOP-538] - Hudson configuration for all hadoop versions

** Task
    * [SQOOP-516] - Sqoop 1.4.2 release preparation
    * [SQOOP-519] - Update the version of hsqldb decadency to 2.X
    * [SQOOP-574] - Create a Hadoop-2.0.0 build profile

** Sub-task
    * [SQOOP-470] - Create tests for blob support for Avro import

** Bug
    * [SQOOP-352] - Export of avro data imported from database table (using sqoop import) fails on year
    * [SQOOP-410] - Direct modes can't import views
    * [SQOOP-425] - Sqoop invokes ResultSet.isLast() which causes Sybase JDBC driver to hang
    * [SQOOP-445] - Wrong query for getListColumnsQuery in PostgresqlManager
    * [SQOOP-448] - boolean fields get nullified during postgres direct import into hive.
    * [SQOOP-450] - Direct MySQL import can fail when using mysqldump version 5.1.14 or above.
    * [SQOOP-452] - Mysql free form queries fail if alias is not used.
    * [SQOOP-453] - Oozie does not work with Sqoop metastore
    * [SQOOP-454] - Upgrade dependency on HBase version 0.92.0-SNAPSHOT as it was already released
    * [SQOOP-460] - Verbose logging does not turn the level for correct logger
    * [SQOOP-468] - Oracle free form queries fail.
    * [SQOOP-473] - Sqoop import-all-tables fails with MySQL connector
    * [SQOOP-474] - Split-by specification incorrectly triggers bounding value query
    * [SQOOP-476] - If table name is a qualified name, Sqoop import fails in DB2
    * [SQOOP-480] - MS SQL server connector and OraOop connector are incompatible with Sqoop-1.4
    * [SQOOP-481] - Sqoop import with --hive-import using wrong column names in --columns throws a NPE
    * [SQOOP-482] - import tool for mysql direct mode reports wrong record number
    * [SQOOP-488] - Parameter for extended verbose is not working due to migrated code to different module
    * [SQOOP-489] - Cannot define partition keys for Hive tables created through Sqoop
    * [SQOOP-490] - Style error in the trunk
    * [SQOOP-503] - --columns argument support for export
    * [SQOOP-505] - Trailing space after jar in managers.d/connectors causes file not found
    * [SQOOP-508] - Sqoop metastore cannot be started due to missing hsqldb jar file
    * [SQOOP-521] - Import fails on tables with names containing hyphens ( - )
    * [SQOOP-524] - hsqldb jar update regression
    * [SQOOP-528] - Remove references to incubator from sources
    * [SQOOP-536] - Blob import doesn't work with avro 1.7.1
    * [SQOOP-539] - getPrimaryKeyQuery is very slow in mysql 5.0.77
    * [SQOOP-571] - Revert SQOOP-519 and SQOOP-524


Changelog - Sqoop - Version 1.4.1-incubating - 02/16/2012

** New Feature
    * [SQOOP-337] - Create Sqoop Logo / Icon
    * [SQOOP-362] - Allow user to override mapping when doing import to AVRO format

** Improvement
    * [SQOOP-397] - Make Sqoop work with Hadoop 0.23
    * [SQOOP-411] - Precompile Pattern for replacement of Hive delimiters
    * [SQOOP-420] - sqoop - compatible with hadoop 1.0.0 
    * [SQOOP-432] - Enforce writing space after if statement

** Task
    * [SQOOP-396] - publish sqoop artifacts to Apache Maven repo
    * [SQOOP-400] - Merge 1.4.0 release changes back to trunk
    * [SQOOP-405] - Enable TestDataDrivenDBInputFormat for Hadoop 0.23 when appropriate
    * [SQOOP-427] - Sqoop 1.4.1 release preparation

** Sub-task
    * [SQOOP-356] - move documentation generation to the maven build
    * [SQOOP-372] - License Audit
    * [SQOOP-412] - Create our own implementation of org.apache.hadoop.conf.Configuration.getInstances
    * [SQOOP-413] - Port files org.apache.hadoop.mapreduce.lib.{db,input}.* from CDH3/Hadoop-0.21 to sqoop

** Bug
    * [SQOOP-384] - Sqoop is incompatible with Hadoop prior to 0.21
    * [SQOOP-392] - Build using maven is broklend due to missing class generated by script write-version-info.sh
    * [SQOOP-393] - Class SqoopOptions was not properly moved
    * [SQOOP-395] - Incorrect or missing SVN property settings
    * [SQOOP-409] - hive-drop-import-delims doesn't work with MySQL direct import
    * [SQOOP-414] - Column names are not guaranteed in order for getColumnNames of OracleManager
    * [SQOOP-418] - MySQLAuthTest hangs when run against MySQL 5.5.3 or higher version
    * [SQOOP-421] - User guide should state that when using --direct, hbase params get ignored
    * [SQOOP-422] - Throw an exception when --direct and hbase* options are used together
    * [SQOOP-424] - Codegen compilation fails with Hadoop 0.23 
    * [SQOOP-426] - Build command ant mvn-install generates Sqoop pom with incorrect group Id.
    * [SQOOP-428] - AvroOutputFormat doesn't support compression even though documentation claims it does
    * [SQOOP-430] - Duplicate Column problem with reserved words
    * [SQOOP-433] - Tests are failing on current 0.23 version
    * [SQOOP-446] - sqoop column terminator "fields-terminated-by" needs to work with any of the following '\007', '0x7', '^G'
    * [SQOOP-478] - Sqoop export tool unexpectedly re-order Oracle table columns 
    * [SQOOP-622] - possible import bug with embedded LF (0x0A) in VARCHAR field


Changelog - Sqoop - Version 1.4.0-incubating - 11/29/2011

** New Feature
    * [SQOOP-305] - Support export from Avro Data Files
    * [SQOOP-313] - Multiple column names to be included in --update-key argument with SQOOP export (update)
    * [SQOOP-327] - Mixed update/insert export support for OracleManager
    * [SQOOP-331] - Support boundary query on the command line
    * [SQOOP-342] - Allow user to override sqoop type mapping
    * [SQOOP-367] - codegen support free-form query

** Improvement
    * [SQOOP-303] - Use Catalog Tables for PostgresqlManager
    * [SQOOP-315] - Update Avro version to 1.5.2
    * [SQOOP-316] - Sqoop user guide should have a troubleshooting section.
    * [SQOOP-318] - Add support for splittable lzo files with Hive
    * [SQOOP-320] - Use Information Schema for SQLServerManager
    * [SQOOP-321] - Support date/time columns for "--incremental append" option
    * [SQOOP-326] - Updgrade Avro dependency to version 1.5.3
    * [SQOOP-351] - Sqoop User Guide's troubleshooting section should include Case-Sensitive Catalog Query Errors
    * [SQOOP-353] - Cleanup the if/else statement in HiveTypes
    * [SQOOP-354] - SQOOP needs to be made compatible with Hadoop  .23 release
    * [SQOOP-355] - improve SQOOP documentation of Avro data file support
    * [SQOOP-357] - To make debugging easier, Sqoop should print out all the exceptions 
    * [SQOOP-361] - [Docs] $CONDITIONS must be escaped to not allow shells to replace it.
    * [SQOOP-366] - Sqoop User Guide's troubleshooting section should include MySQL setup instructions

** Task
    * [SQOOP-302] - Use Information Schema for MySQLManager
    * [SQOOP-309] - Update Sqoop dependency versions
    * [SQOOP-310] - Review license headers
    * [SQOOP-369] - Sqoop 1.4.0 release preparation

** Sub-task
    * [SQOOP-370] - Version number for upcoming release.
    * [SQOOP-371] - Migrate util package to new name space
    * [SQOOP-374] - Migrate tool and orm packages to new name space
    * [SQOOP-375] - Migrate metastore and metastore.hsqldb packages to new name space
    * [SQOOP-376] - Migrate mapreduce package to new name space
    * [SQOOP-377] - Migrate mapreduce.db package to new name space
    * [SQOOP-378] - Migrate manager package to new name space
    * [SQOOP-379] - Migrate lib and io packages to new name space
    * [SQOOP-380] - Migrate hive and hbase packages to new name space
    * [SQOOP-381] - Migrate cli and config packages to new name space
    * [SQOOP-383] - Version tool is not working.
    * [SQOOP-386] - Namespace migration cleanup
    * [SQOOP-388] - Add license header to Hive testdata
    * [SQOOP-389] - Include change log

** Bug
    * [SQOOP-308] - Generated Avro Schema cannot handle nullable fields
    * [SQOOP-314] - Basic export hangs when target database does not support INSERT syntax with multiple rows of values
    * [SQOOP-317] - OracleManager should allow working with tables owned by other users.
    * [SQOOP-319] - The --hive-drop-import-delims option should accept a replacement string
    * [SQOOP-323] - Support for the NVARCHAR datatype
    * [SQOOP-325] - Sqoop doesn't build on intellij
    * [SQOOP-329] - SQOOP doesn't work with the DB2 JCC driver
    * [SQOOP-330] - Free form query import with column transformation failed without obvious error message
    * [SQOOP-332] - Cannot use --as-avrodatafile with --query
    * [SQOOP-336] - Avro import does not support varbinary types
    * [SQOOP-338] - NPE after specifying incorrect JDBC credentials
    * [SQOOP-339] - Use of non-portable mknod utility causes build problems on Mac OS X
    * [SQOOP-340] - Rise exception when both --direct and --as--sequencefile or --as-avrodatafile are given
    * [SQOOP-341] - Sqoop doesn't handle unsigned ints at least with MySQL
    * [SQOOP-346] - Sqoop needs to be using java version 1.6 for its source
    * [SQOOP-349] - A bunch of the fields are wrong in pom.xml 
    * [SQOOP-358] - Sqoop import fails on netezza nvarchar datatype with --as-avrodatafile
    * [SQOOP-359] - Import fails with Unknown SQL datatype exception
    * [SQOOP-364] - Default getCurTimestampQuery() in SqlManager is not working for PostgreSQL
    * [SQOOP-368] - Resolve ERROR tool.ImportTool: Imported Failed: Duplicate Column identifier specified: 'COLUMN-NAME'
    * [SQOOP-373] - Can only write to default file system on direct import
    * [SQOOP-385] - Typo in PostgresqlTest.java regarding configuring postgresql.conf.
    * [SQOOP-398] - Sqoop to avro saves NUMERIC as strings

