Release 348 (14 Dec 2020)#


  • Add support for DISTINCT clause in aggregations within correlated subqueries. (#5904)

  • Support SHOW STATS for arbitrary queries. (#3109)

  • Improve query performance by reducing worker to worker communication overhead. (#6126)

  • Improve performance of ORDER BY ... LIMIT queries. (#6072)

  • Reduce memory pressure and improve performance of queries involving joins. (#6176)

  • Fix EXPLAIN ANALYZE for certain queries that contain broadcast join. (#6115)

  • Fix planning failures for queries that contain outer joins and aggregations using FILTER (WHERE <condition>) syntax. (#6141)

  • Fix incorrect results when correlated subquery in join contains aggregation functions such as array_agg or checksum. (#6145)

  • Fix incorrect query results when using timestamp with time zone constants with precision higher than 3 describing same point in time but in different zones. (#6318)

  • Fix duplicate query completion events if query fails early. (#6103)

  • Fix query failure when views are accessed and current session does not specify default schema and catalog. (#6294)

Web UI#

  • Add support for OAuth2 authorization. (#5355)

  • Fix invalid operator stats in Stage Performance view. (#6114)

JDBC driver#

  • Allow reading timestamp with time zone value as ZonedDateTime using ResultSet.getObject(int column, Class<?> type) method. (#307)

  • Accept java.time.LocalDate in PreparedStatement.setObject(int, Object). (#6301)

  • Extend PreparedStatement.setObject(int, Object, int) to allow setting time and timestamp values with precision higher than nanoseconds. (#6300) This can be done via providing a String value representing a valid SQL literal.

  • Change representation of a row value. ResultSet.getObject now returns an instance of io.prestosql.jdbc.Row class, which better represents the returned value. Previously a row value was represented as a Map instance, with unnamed fields being named like field0, field1, etc. You can access the previous behavior by invoking getObject(column, Map.class) on the ResultSet object. (#4588)

  • Represent varbinary value using hex string representation in ResultSet.getString. Previously the return value was useless, similar to "B@2de82bf8". (#6247)

  • Report precision of the time(p), time(p) with time zone, timestamp(p) and timestamp(p) with time zone in the DECIMAL_DIGITS column in the result set returned from DatabaseMetaData#getColumns. (#6307)

  • Fix the value of the DATA_TYPE column for time(p) and time(p) with time zone in the result set returned from DatabaseMetaData#getColumns. (#6307)

  • Fix failure when reading a timestamp or timestamp with time zone value with seconds fraction greater than or equal to 999999999500 picoseconds. (#6147)

  • Fix failure when reading a time value with seconds fraction greater than or equal to 999999999500 picoseconds. (#6204)

  • Fix element representation in arrays returned from ResultSet.getArray, making it consistent with ResultSet.getObject. Previously the elements were represented using internal client representation (e.g. String). (#6048)

  • Fix ResultSetMetaData.getColumnType for timestamp with time zone. Previously the type was miscategorized as java.sql.Types.TIMESTAMP. (#6251)

  • Fix ResultSetMetaData.getColumnType for time with time zone. Previously the type was miscategorized as java.sql.Types.TIME. (#6251)

  • Fix failure when an instance of SphericalGeography geospatial type is returned in the ResultSet. (#6240)


  • Fix rendering of row values with unnamed fields. Previously they were printed using fake field names like field0, field1, etc. (#4587)

  • Fix query progress reporting. (#6119)

  • Fix failure when an instance of SphericalGeography geospatial type is returned to the client. (#6238)

Hive connector#

  • Allow configuring S3 endpoint in security mapping. (#3869)

  • Add support for S3 streaming uploads. Data is uploaded to S3 as it is written, rather than staged to a local temporary file. This feature is disabled by default, and can be enabled using the hive.s3.streaming.enabled configuration property. (#3712, #6201)

  • Reduce load on metastore when background cache refresh is enabled. (#6101, #6156)

  • Verify that data is in the correct bucket file when reading bucketed tables. This is enabled by default, as incorrect bucketing can cause incorrect query results, but can be disabled using the hive.validate-bucketing configuration property or the validate_bucketing session property. (#6012)

  • Allow fallback to legacy Hive view translation logic via hive.legacy-hive-view-translation config property or legacy_hive_view_translation session property. (#6195)

  • Add deserializer class name to split information exposed to the event listener. (#6006)

  • Improve performance when querying tables that contain symlinks. (#6158, #6213)

Iceberg connector#

  • Improve performance of queries containing filters on non-partition columns. Such filters are now used for optimizing split generation and table scan. (#4932)

  • Add support for Google Cloud Storage and Azure Storage. (#6186)

Kafka connector#

  • Allow writing timestamp with time zone values into columns using milliseconds-since-epoch or seconds-since-epoch JSON encoders. (#6074)

Other connectors#

  • Fix ineffective table metadata caching for PostgreSQL, MySQL, SQL Server, Redshift, MemSQL and Phoenix connectors. (#6081, #6167)


  • Change SystemAccessControl#filterColumns and ConnectorAccessControl#filterColumns methods to accept a set of column names, and return a set of visible column names. (#6084)

  • Expose catalog names corresponding to the splits through the split completion event of the event listener. (#6006)