blob: 0d0a72fe0df782f0b9a1028920a78522ff82d8f8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.carbondata.spark.testsuite.allqueries
import org.apache.spark.sql.Row
import org.apache.spark.sql.test.util.QueryTest
import org.scalatest.BeforeAndAfterAll
import org.apache.carbondata.core.constants.CarbonCommonConstants
import org.apache.carbondata.core.util.CarbonProperties
class TestPruneUsingSegmentMinMax extends QueryTest with BeforeAndAfterAll {
override def beforeAll(): Unit = {
drop
CarbonProperties.getInstance()
.addProperty(CarbonCommonConstants.CARBON_LOAD_ALL_SEGMENT_INDEXES_TO_CACHE, "false")
}
private def drop = {
sql("drop table if exists carbon")
sql("drop table if exists parquet")
}
test("test if matched segment is only loaded to cache") {
createTablesAndLoadData
checkAnswer(sql("select * from carbon where a=1"), sql("select * from parquet where a=1"))
val showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("1/3 index files cached"))
drop
}
private def createTablesAndLoadData = {
drop
// scalastyle:off lineLength
sql("create table carbon(a int, b string, c double,d int,e timestamp) stored as carbondata")
sql("insert into carbon values(1,'ab',23.4,5,'2017-09-01 00:00:00'),(2,'aa',23.6,8,'2017-09-02 00:00:00')")
sql("insert into carbon values(3,'ab',23.4,5,'2017-09-01 00:00:00'),(4,'aa',23.6,8,'2017-09-02 00:00:00')")
sql("insert into carbon values(5,'ab',23.4,5,'2017-09-01 00:00:00'),(6,'aa',23.6,8,'2017-09-02 00:00:00')")
sql("create table parquet(a int, b string, c double,d int,e timestamp) using parquet")
sql("insert into parquet values(1,'ab',23.4,5,'2017-09-01 00:00:00'),(2,'aa',23.6,8,'2017-09-02 00:00:00')")
sql("insert into parquet values(3,'ab',23.4,5,'2017-09-01 00:00:00'),(4,'aa',23.6,8,'2017-09-02 00:00:00')")
sql("insert into parquet values(5,'ab',23.4,5,'2017-09-01 00:00:00'),(6,'aa',23.6,8,'2017-09-02 00:00:00')")
// scalastyle:on lineLength
}
test("test if matched segment is only loaded to cache after drop column") {
createTablesAndLoadData
checkAnswer(sql("select * from carbon where a=1"), sql("select * from parquet where a=1"))
var showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("1/3 index files cached"))
checkAnswer(sql("select * from carbon where a=5"), sql("select * from parquet where a=5"))
showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("2/3 index files cached"))
sql("alter table carbon drop columns(d,e)")
sql("insert into carbon values(7,'gg',45.6),(8,'eg',45.6)")
checkAnswer(sql("select a from carbon where a=1"), sql("select a from parquet where a=1"))
showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("1/4 index files cached"))
checkAnswer(sql("select * from carbon where a=7"), Seq(Row(7, "gg", 45.6)))
showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("2/4 index files cached"))
drop
}
test("test if matched segment is only loaded to cache after add column") {
createTablesAndLoadData
sql("alter table carbon add columns(g decimal(3,2))")
sql("insert into carbon values" +
"(7,'gg',45.6,3,'2017-09-01 00:00:00',23.5),(8,'eg',45.6,6,'2017-09-01 00:00:00', 4.34)")
checkAnswer(sql("select a from carbon where a=1"), sql("select a from parquet where a=1"))
var showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("1/4 index files cached"))
checkAnswer(sql("select a from carbon where a=7"), Seq(Row(7)))
showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("2/4 index files cached"))
drop
}
test("test segment pruning after update operation") {
createTablesAndLoadData
checkAnswer(sql("select a from carbon where a=1"), Seq(Row(1)))
var showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("1/3 index files cached"))
sql("insert into carbon values" +
"(1,'ab',23.4,5,'2017-09-01 00:00:00'),(2,'aa',23.6,8,'2017-09-02 00:00:00')")
sql("insert into carbon values" +
"(1,'ab',23.4,5,'2017-09-01 00:00:00'),(2,'aa',23.6,8,'2017-09-02 00:00:00')")
sql("update carbon set(a)=(10) where a=1").collect()
checkAnswer(sql("select count(*) from carbon where a=10"), Seq(Row(3)))
showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("1/6 index files cached"))
drop
}
test("alter set/unset sort column properties") {
createTablesAndLoadData
sql(s"alter table carbon set tblproperties('sort_scope'='local_sort', 'sort_columns'='a')")
sql("insert into carbon values" +
"(3,'ab',23.4,5,'2017-09-01 00:00:00'),(4,'aa',23.6,8,'2017-09-02 00:00:00')")
sql("insert into carbon values" +
"(3,'ab',23.4,5,'2017-09-01 00:00:00'),(6,'aa',23.6,8,'2017-09-02 00:00:00')")
assert(sql("select a from carbon where a=3").count() == 3)
val showCache = sql("show metacache on table carbon").collect()
assert(showCache(0).get(2).toString.equalsIgnoreCase("3/5 index files cached"))
}
override def afterAll(): Unit = {
drop
CarbonProperties.getInstance()
.addProperty(CarbonCommonConstants.CARBON_LOAD_ALL_SEGMENT_INDEXES_TO_CACHE,
CarbonCommonConstants.CARBON_LOAD_ALL_SEGMENT_INDEXES_TO_CACHE_DEFAULT)
}
}