Apache Drill 1.9.0 Release Notes

Release date: November 29, 2016

Today, we’re happy to announce the availability of Drill 1.9.0. You can download it here.

New Features

This release of Drill provides the following new features:

  • Asynchronous Parquet reader
  • Parquet filter pushdown
  • Dynamic UDF support
  • HTTPD format plugin

The following sections list additional bug fixes and improvements:


  • [DRILL-4420] - C client and ODBC driver should move to using the new metadata methods provided by DRILL-4385
  • [DRILL-4452] - Update avatica version for Drill jdbc
  • [DRILL-4560] - ZKClusterCoordinator does not call DrillbitStatusListener.drillbitRegistered for new bits
  • [DRILL-4968] - Add column size information to ColumnMetadata
  • [DRILL-4969] - Basic implementation for displaySize


  • [DRILL-1996] - C++ Client: Make Cancel API Public
  • [DRILL-3898] - No space error during external sort does not cancel the query
  • [DRILL-4203] - Parquet File : Date is stored wrongly
  • [DRILL-4369] - Database driver fails to report any major or minor version information
  • [DRILL-4370] - DatabaseMetadata returning <Properties resource apache-drill-jdbc.properties not loaded>
  • [DRILL-4525] - Query with BETWEEN clause on Date and Timestamp values fails with Validation Error
  • [DRILL-4542] - if external sort fails to spill to disk, memory is leaked and wrong error message is displayed
  • [DRILL-4618] - random numbers generator function broken
  • [DRILL-4763] - Parquet file with DATE logical type produces wrong results for simple SELECT
  • [DRILL-4767] - Parquet reader throw IllegalArgumentException for int32 type with GZIP compression
  • [DRILL-4769] - forman spins query int32 data with snappy compression
  • [DRILL-4770] - ParquetRecordReader throws NPE querying a single int64 column file
  • [DRILL-4823] - Fix OOM while trying to prune partitions with reasonable data size
  • [DRILL-4824] - JSON with complex nested data produces incorrect output with missing fields
  • [DRILL-4826] - Query against INFORMATION_SCHEMA.TABLES degrades as the number of views increases
  • [DRILL-4862] - wrong results - use of convert_from(binary_string(key),'UTF8') in filter results in wrong results
  • [DRILL-4870] - drill-config.sh sets JAVA_HOME incorrectly for the Mac
  • [DRILL-4874] - "No UserGroupInformation while generating ORC splits" - hive known issue in 1.2.0-mapr-1607 release.
  • [DRILL-4877] - max(dir0), max(dir1) query against parquet data slower by 2X
  • [DRILL-4880] - Support JDBC driver registration using ServiceLoader
  • [DRILL-4884] - Fix IOB exception in limit n query when n is beyond 65535.
  • [DRILL-4888] - putIfAbsent for ZK stores is not atomic
  • [DRILL-4894] - Fix unit test failure in 'storage-hive/core' module
  • [DRILL-4905] - Push down the LIMIT to the parquet reader scan to limit the numbers of records read
  • [DRILL-4906] - CASE Expression with constant generates class exception
  • [DRILL-4911] - SimpleParallelizer should avoid plan serialization for logging purpose when debug logging is not enabled.
  • [DRILL-4921] - Scripts drill_config.sh, drillbit.sh, and drill-embedded fail when accessed via a symbolic link
  • [DRILL-4925] - Add types filter to getTables metadata API
  • [DRILL-4930] - Metadata results are not sorted
  • [DRILL-4934] - ServiceEngine does not use property useIP for DrillbitStartup
  • [DRILL-4941] - UnsupportedOperationException : CASE WHEN true or null then 1 else 0 end
  • [DRILL-4945] - Missing subtype information in metadata returned by prepared statement
  • [DRILL-4950] - Consume Spurious Empty Batches in JDBC
  • [DRILL-4954] - allTextMode in the MapRDB plugin always return nulls
  • [DRILL-4964] - Drill fails to connect to hive metastore after hive metastore is restarted unless drillbits are restarted also
  • [DRILL-4972] - Drillbit shuts down immediately after starting if embedded web server is disabled
  • [DRILL-4974] - NPE in FindPartitionConditions.analyzeCall() for 'holistic' expressions
  • [DRILL-4989] - Fix TestParquetWriter.testImpalaParquetBinaryAsTimeStamp_DictChange
  • [DRILL-4990] - Use new HDFS API access instead of listStatus to check if users have permissions to access workspace.
  • [DRILL-4993] - Documentation: Wrong output displayed for convert_from() with a map
  • [DRILL-5004] - Parquet date correction gives null pointer exception if there is no createdBy entry in the metadata
  • [DRILL-5007] - Dynamic UDF lazy-init does not work correctly in multi-node cluster
  • [DRILL-5009] - Query with a simple join fails on Hive generated parquet
  • [DRILL-5047] - When session option is string, query profile is displayed incorrectly on Web UI


  • [DRILL-1950] - Implement filter pushdown for Parquet
  • [DRILL-3178] - csv reader should allow newlines inside quotes
  • [DRILL-4653] - Malformed JSON should not stop the entire query from progressing
  • [DRILL-4674] - Allow casting to boolean the same literals as in Postgre
  • [DRILL-4752] - Remove submit_plan script from Drill distribution
  • [DRILL-4771] - Drill should avoid doing the same join twice if count(distinct) exists
  • [DRILL-4792] - Include session options used for a query as part of the profile
  • [DRILL-4800] - Improve parquet reader performance
  • [DRILL-4927] - Add support for Null Equality Joins
  • [DRILL-4967] - Adding template_name to source code generated using freemarker template
  • [DRILL-4986] - Allow users to customize the Drill log file name
  • [DRILL-4987] - Use ImpersonationUtil in RemoteFunctionRegistry
  • [DRILL-5031] - Documentation for HTTPD Parser

New Feature

  • [DRILL-1268] - C++ Client. Write Unit Test for Drill Client
  • [DRILL-3423] - Add New HTTPD format plugin
  • [DRILL-4714] - Add metadata and prepared statement APIs to DrillClient<->Drillbit interface
  • [DRILL-4726] - Dynamic UDFs support


  • [DRILL-4853] - Update C++ protobuf source files
  • [DRILL-4886] - Merge maprdb format plugin source code