blob: 33ac413ca5c9b7b5495b2d6c02b89ef428343e63 [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.integration.spark.testsuite.timeseries
import org.apache.spark.sql.AnalysisException
import org.apache.spark.sql.test.util.QueryTest
import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach}
import org.apache.carbondata.common.exceptions.sql.{MalformedCarbonCommandException, NoSuchDataMapException}
import org.apache.carbondata.core.constants.CarbonCommonConstants
import org.apache.carbondata.core.util.CarbonProperties
import org.apache.carbondata.spark.exception.ProcessMetaDataException
class TestTimeSeriesDropSuite extends QueryTest with BeforeAndAfterAll with BeforeAndAfterEach {
val timeSeries = "timeseries"
var timestampFormat: String = _
override def beforeAll: Unit = {
timestampFormat = CarbonProperties.getInstance()
.getProperty(CarbonCommonConstants.CARBON_TIMESTAMP_FORMAT,
CarbonCommonConstants.CARBON_TIMESTAMP_DEFAULT_FORMAT)
CarbonProperties.getInstance()
.addProperty(CarbonCommonConstants.CARBON_TIMESTAMP_FORMAT,
CarbonCommonConstants.CARBON_TIMESTAMP_DEFAULT_FORMAT)
dropTable("mainTable")
sql(
"""
| CREATE TABLE mainTable(
| dataTime TIMESTAMP,
| name STRING,
| city STRING,
| age INT)
| STORED BY 'org.apache.carbondata.format'
""".stripMargin)
}
override def afterEach(): Unit = {
dropDataMaps("mainTable", "agg1_second", "agg1_minute",
"agg1_hour", "agg1_day", "agg1_month", "agg1_year")
}
test("test timeseries drop datamap 1: drop datamap should throw exception, maintable hasn't datamap") {
// DROP DATAMAP DataMapName if the DataMapName not exists
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[NoSuchDataMapException] {
sql(s"DROP DATAMAP agg1_month ON TABLE mainTable")
}
assert(e.getMessage.equals(
"Datamap with name agg1_month does not exist"))
}
test("test timeseries drop datamap 2: should support drop datamap IF EXISTS, maintable hasn't datamap") {
// DROP DATAMAP IF EXISTS DataMapName
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
sql(s"DROP DATAMAP IF EXISTS agg1_month ON TABLE mainTable")
assert(true)
}
test("test timeseries drop datamap 3: should support drop datamap, maintable has datamap") {
sql(
s"""
| CREATE DATAMAP agg1_month ON TABLE mainTable
| USING '$timeSeries'
| DMPROPERTIES (
| 'event_time'='dataTime',
| 'MONTH_GRANULARITY'='1')
| AS SELECT dataTime, SUM(age) from mainTable
| GROUP BY dataTime
""".stripMargin)
// Before DROP DATAMAP
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), true, "agg1_month")
// DROP DATAMAP DataMapName
sql(s"DROP DATAMAP agg1_month ON TABLE mainTable")
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[NoSuchDataMapException] {
sql(s"DROP DATAMAP agg1_month ON TABLE mainTable")
}
assert(e.getMessage.equals(
"Datamap with name agg1_month does not exist"))
}
test("test timeseries drop datamap 4: should support drop datamap with IF EXISTS, maintable has datamap") {
sql(
s"""
| CREATE DATAMAP agg1_month ON TABLE mainTable
| USING '$timeSeries'
| DMPROPERTIES (
| 'event_time'='dataTime',
| 'MONTH_GRANULARITY'='1')
| AS SELECT dataTime, SUM(age) from mainTable
| GROUP BY dataTime
""".stripMargin)
// DROP DATAMAP IF EXISTS DataMapName
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), true, "agg1_month")
// DROP DATAMAP DataMapName
sql(s"DROP DATAMAP agg1_month ON TABLE mainTable")
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[MalformedCarbonCommandException] {
sql(s"DROP DATAMAP agg1_month ON TABLE mainTable")
}
assert(e.getMessage.equals(
"Datamap with name agg1_month does not exist"))
}
test("test timeseries drop datamap 5: drop datamap without IF EXISTS when table not exists, catch MalformedCarbonCommandException") {
// DROP DATAMAP DataMapName if the DataMapName not exists
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[MalformedCarbonCommandException] {
sql(s"DROP DATAMAP agg1_month ON TABLE mainTableNotExists")
}
assert(e.getMessage.contains(
"Dropping datamap agg1_month failed: Table or view 'maintablenotexists' not found"))
}
test("test timeseries drop datamap 6: drop datamap with IF EXISTS when table not exists, catch MalformedCarbonCommandException") {
// DROP DATAMAP DataMapName if the DataMapName not exists
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[MalformedCarbonCommandException] {
sql(s"DROP DATAMAP IF EXISTS agg1_month ON TABLE mainTableNotExists")
}
assert(e.getMessage.contains(
"Dropping datamap agg1_month failed: Table or view 'maintablenotexists' not found"))
}
test("test timeseries drop datamap 7: drop datamap should throw exception if table not exist, catch ProcessMetaDataException") {
// DROP DATAMAP DataMapName if the DataMapName not exists and
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[ProcessMetaDataException] {
sql(s"DROP DATAMAP agg1_month ON TABLE mainTableNotExists")
}
assert(e.getMessage.contains(
"Dropping datamap agg1_month failed: Table or view 'maintablenotexists' not found "))
}
test("test timeseries drop datamap 8: should throw exception if table not exist with IF EXISTS, catch ProcessMetaDataException") {
// DROP DATAMAP DataMapName if the DataMapName not exists
// DROP DATAMAP should throw exception if table not exist, even though there is IF EXISTS"
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[ProcessMetaDataException] {
sql(s"DROP DATAMAP IF EXISTS agg1_month ON TABLE mainTableNotExists")
}
assert(e.getMessage.contains(
"Dropping datamap agg1_month failed: Table or view 'maintablenotexists' not found "))
}
test("test timeseries drop datamap 9: drop datamap when table not exists, there are datamap in database") {
sql(
s"""CREATE DATAMAP agg1_minute ON TABLE mainTable
|USING '$timeSeries'
|DMPROPERTIES (
| 'event_time'='dataTime',
| 'minute_GRANULARITY'='1')
|AS SELECT dataTime, SUM(age) from mainTable
|GROUP BY dataTime
""".stripMargin)
// DROP DATAMAP DataMapName if the DataMapName not exists
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[ProcessMetaDataException] {
sql(s"DROP DATAMAP agg1_month ON TABLE mainTableNotExists")
}
assert(e.getMessage.contains(
"Dropping datamap agg1_month failed: Table or view 'maintablenotexists' not found"))
}
test("test timeseries drop datamap 10: drop datamap when table not exists, there are datamap in database") {
sql(
s"""CREATE DATAMAP agg3 ON TABLE mainTable
|USING '$timeSeries'
|DMPROPERTIES (
| 'event_time'='dataTime',
| 'month_GRANULARITY'='1')
|AS SELECT dataTime, SUM(age) from mainTable
|GROUP BY dataTime
""".stripMargin)
// DROP DATAMAP DataMapName if the DataMapName not exists
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[ProcessMetaDataException] {
sql(s"DROP DATAMAP IF EXISTS agg1_month ON TABLE mainTableNotExists")
}
assert(e.getMessage.contains(
"Dropping datamap agg1_month failed: Table or view 'maintablenotexists' not found"))
}
test("test timeseries drop datamap 11: drop datamap when table not exists, there are datamap in database") {
sql(
s"""
|CREATE DATAMAP agg4 ON TABLE mainTable
|USING '$timeSeries'
|DMPROPERTIES (
| 'event_time'='dataTime',
| 'month_GRANULARITY'='1')
|AS SELECT dataTime, SUM(age) from mainTable
|GROUP BY dataTime
""".stripMargin)
// DROP DATAMAP DataMapName if the DataMapName not exists
checkExistence(sql("SHOW DATAMAP ON TABLE mainTable"), false, "agg1_month")
val e: Exception = intercept[AnalysisException] {
sql(s"DROP DATAMAP IF NOT EXISTS agg1_month ON TABLE mainTableNotExists")
}
assert(e.getMessage.contains("failure"))
}
override def afterAll: Unit = {
dropTable("mainTable")
dropTable("mainTableNotExists")
CarbonProperties.getInstance()
.addProperty(CarbonCommonConstants.CARBON_TIMESTAMP_FORMAT, timestampFormat)
}
}