diff --git a/phoenix-spark/src/main/java/org/apache/phoenix/spark/datasource/v2/reader/PhoenixDataSourceReader.java b/phoenix-spark/src/main/java/org/apache/phoenix/spark/datasource/v2/reader/PhoenixDataSourceReader.java index 18e304b4..dfc928a1 100644 --- a/phoenix-spark/src/main/java/org/apache/phoenix/spark/datasource/v2/reader/PhoenixDataSourceReader.java +++ b/phoenix-spark/src/main/java/org/apache/phoenix/spark/datasource/v2/reader/PhoenixDataSourceReader.java @@ -70,6 +70,7 @@ public class PhoenixDataSourceReader implements DataSourceReader, SupportsPushDo private final String zkUrl; private final boolean dateAsTimestamp; private final Properties overriddenProps; + private final boolean disableBlockCache; private StructType schema; private Filter[] pushedFilters = new Filter[]{}; @@ -87,6 +88,7 @@ public PhoenixDataSourceReader(DataSourceOptions options) { this.tableName = options.tableName().get(); this.zkUrl = options.get(PhoenixDataSource.ZOOKEEPER_URL).get(); this.dateAsTimestamp = options.getBoolean("dateAsTimestamp", false); + this.disableBlockCache = options.getBoolean("NO_CACHE", false); this.overriddenProps = extractPhoenixHBaseConfFromOptions(options); setSchema(); } @@ -148,6 +150,9 @@ public List> planInputPartitions() { // Optimize the query plan so that we potentially use secondary indexes final QueryPlan queryPlan = pstmt.optimizeQuery(selectStatement); final Scan scan = queryPlan.getContext().getScan(); + if (this.disableBlockCache) { + scan.setCacheBlocks(false); + } // setting the snapshot configuration Optional snapshotName = options.get(PhoenixConfigurationUtil.SNAPSHOT_NAME_KEY); diff --git a/phoenix-spark/src/test/java/org/apache/phoenix/spark/datasource/v2/PhoenixDataSourceTest.java b/phoenix-spark/src/test/java/org/apache/phoenix/spark/datasource/v2/PhoenixDataSourceTest.java index 018f517a..7dc890e1 100644 --- a/phoenix-spark/src/test/java/org/apache/phoenix/spark/datasource/v2/PhoenixDataSourceTest.java +++ b/phoenix-spark/src/test/java/org/apache/phoenix/spark/datasource/v2/PhoenixDataSourceTest.java @@ -38,11 +38,14 @@ public class PhoenixDataSourceTest { private static final String V1 = "v1"; private static final String V2 = "v2"; private static final String V3 = "v3"; + private static final String NO_CACHE = "NO_CACHE"; + private static final String NO_CACHE_VALUE = "true"; private static final String EQ = "="; private static final String COMMA = ","; private static final String SINGLE_PHOENIX_PROP = P1 + EQ + V1; private static final String VALID_PHOENIX_PROPS_LIST = - SINGLE_PHOENIX_PROP + COMMA + P2 + EQ + V2 + COMMA + P3 + EQ + V3; + SINGLE_PHOENIX_PROP + COMMA + P2 + EQ + V2 + COMMA + P3 + EQ + V3 + COMMA + + NO_CACHE + EQ + NO_CACHE_VALUE; private static final String INVALID_PHOENIX_PROPS_LIST = SINGLE_PHOENIX_PROP + COMMA + P2 + V2 + COMMA + P3 + EQ + V3; @@ -64,6 +67,8 @@ public void testPhoenixConfigsExtractedProperly() { assertEquals(V1, p.getProperty(P1)); assertEquals(V2, p.getProperty(P2)); assertEquals(V3, p.getProperty(P3)); + assertEquals(V3, p.getProperty(P3)); + assertEquals(true, Boolean.valueOf(p.getProperty(NO_CACHE))); } @Test