
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

** 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

