PA_CR_PA-3.9.0.0-RC1_redshift_08.00.0002_RedshiftJDBC-1.0.13.1313

Preface

This report covers the following products.

  • Pentaho Analysis 5.3.0.0-RC ( 3.9.0.0-RC )
  • Redshift 8.00.0002?
  • Amazon driver for RedShift 1.0.13.1313

Feature

Status

Notes

Concurrency and Thread Safety


Using a connection pool causes intermittent issues.

Error Handling and Recovery


If wrong credentials are used to establish a connection, the driver becomes unusable until a full JVM restart.

Degenerate Schemas

 

Star Schemas


 

Snowflake Schemas


 

Filters


 

Top Count


setMaxRows() is not implemented correctly in the JDBC driver.

Aggregation Tables


 

Null Values & Keys


 

Inline Tables


 

Distinct Count


Not all forms of distinct counts are supported, although the minimum support it offers is sufficient for Mondrian.

Grouping Sets


Grouping sets are not supported.

Failures

Concurrency and Thread Safety

Symptom

When a connection pool is used, the driver fails somewhat randomly. We have not been able to find a deterministic reproduction path. Below is the stack trace that we sometimes get.

Caused by: java.sql.SQLException: [Amazon](500150) Error setting/closing connection: Not Connected.
	at com.amazon.redshift.client.PGClient.isConnected(Unknown Source)
	at com.amazon.redshift.client.PGClient.directExecute(Unknown Source)
	at com.amazon.redshift.core.jdbc4.PGJDBC4DatabaseMetaData.setDefaultProperties(Unknown Source)
	at com.amazon.redshift.core.jdbc4.PGJDBC4DatabaseMetaData.<init>(Unknown Source)
	at com.amazon.redshift.core.jdbc4.PGJDBC4ObjectFactory.createDatabaseMetaData(Unknown Source)
	at com.amazon.jdbc.common.SConnection.getMetaData(Unknown Source)
	at org.apache.commons.dbcp.DelegatingConnection.getMetaData(DelegatingConnection.java:345)
	at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.getMetaData(PoolingDataSource.java:245)
(snip)
Caused by: com.amazon.support.exceptions.GeneralException: [Amazon](500150) Error setting/closing connection: Not Connected.
	... 67 more

Top Count

Symptom

TopCount operations are not working. The JDBC driver doesn't enforce the value passed to java.sql.Statement.setMaxRows().

Failed tests

Test

Result

org.pentaho.mondrian.tck.TopCountTest.testSetMaxRows
org.pentaho.mondrian.tck.TopCountTest.testTopCount

The driver doesn't use the value passed to setMaxRows().

java.lang.AssertionError: ResultSet returned more rows than expected
	at org.junit.Assert.fail(Assert.java:88)
	at org.pentaho.mondrian.tck.SqlExpectation.validateRows(SqlExpectation.java:107)
	at org.pentaho.mondrian.tck.SqlExpectation.verify(SqlExpectation.java:64)
	at org.pentaho.mondrian.tck.SqlContext.verify(SqlContext.java:75)
	at org.pentaho.mondrian.tck.TopCountTest.testSetMaxRows(TopCountTest.java:53)

Warnings

Distinct Count

Symptom

Not all forms of distinct count queries are supported. One form of distinct count for multiple columns is supported however, so mondrian can batch the queries as needed. The integration tests have also shown that the dialect is issuing the distinct count queries correctly.

Failed tests

Test

Result

org.pentaho.mondrian.tck.AggregationTest.testCompoundColumnSQL

Cannot batch multiple distinct count columns with the following syntax

Caused by: java.sql.SQLException: [Amazon](500310) Invalid operation: function count(integer, integer) does not exist;
	at com.amazon.redshift.client.messages.inbound.ErrorResponse.toErrorException(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.handleErrorResponse(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.getOperationMetadata(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.getOperationMetadata(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.handleMessage(Unknown Source)
	at com.amazon.jdbc.communications.InboundMessagesPipeline.getNextMessageOfClass(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.doMoveToNextClass(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.getReadyForQuery(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.getOperationMetadata(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.getOperationMetadata(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.handleMessage(Unknown Source)
	at com.amazon.jdbc.communications.InboundMessagesPipeline.getNextMessageOfClass(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.doMoveToNextClass(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.getReadyForQuery(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.getOperationMetadata(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.getOperationMetadata(Unknown Source)
	at com.amazon.redshift.client.PGMessagingContext.getBindComplete(Unknown Source)
	at com.amazon.redshift.client.PGClient.directExecute(Unknown Source)
	at com.amazon.redshift.dataengine.PGIQueryExecutor.execute(Unknown Source)
	at com.amazon.jdbc.common.SStatement.executeNoParams(Unknown Source)
	at com.amazon.jdbc.common.SStatement.execute(Unknown Source)

Grouping sets

Symptom

Queries which use grouping sets are not supported. This is a optimization feature supported by some more advanced databases. It allows to batch cell requests and improve the overall performance.

Failed tests

Test

Result

org.pentaho.mondrian.tck.GroupingSetTest.testEmptyEntry

Grouping set queries are not supported.

select
    customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost
from
    time_by_day, sales_fact_1997, customer
where
    (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997
    and sales_fact_1997.customer_id = customer.customer_id)
group by grouping sets
    ((customer.gender),())

org.pentaho.mondrian.tck.GroupingSetTest.testPlainEntry

Grouping set queries are not supported.

select
    customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost
from
    time_by_day, sales_fact_1997, customer
where
    (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997
    and sales_fact_1997.customer_id = customer.customer_id)
group by grouping sets
    ((customer.gender))

org.pentaho.mondrian.tck.GroupingSetTest.testComplexEntry

Grouping set queries are not supported.

select
    time_by_day.the_year as the_year, customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost
from
    time_by_day, sales_fact_1997, customer
where
    (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997
    and sales_fact_1997.customer_id = customer.customer_id)
group by grouping sets
    ((time_by_day.the_year, customer.gender))

org.pentaho.mondrian.tck.GroupingSetTest.testMultipleEntries

Grouping set queries are not supported.

select
    time_by_day.the_year as the_year, customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost
from
    time_by_day, sales_fact_1997, customer
where
    (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997
    and sales_fact_1997.customer_id = customer.customer_id)
group by grouping sets
    ((time_by_day.the_year, customer.gender), (time_by_day.the_year),())