You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by xu...@apache.org on 2019/06/10 16:18:29 UTC

[carbondata] branch master updated: [CARBONDATA-3258] Add more test cases for mv datamap

This is an automated email from the ASF dual-hosted git repository.

xubo245 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/carbondata.git


The following commit(s) were added to refs/heads/master by this push:
     new 1baa485  [CARBONDATA-3258] Add more test cases for mv datamap
1baa485 is described below

commit 1baa485d8345f606457edfcecf8b53f9fed6efc0
Author: qiuchenjian <80...@qq.com>
AuthorDate: Sun Jan 20 21:33:20 2019 +0800

    [CARBONDATA-3258] Add more test cases for mv datamap
    
    This closes #3084
---
 .../mv/rewrite/MVExceptionTestCase.scala           | 55 +++++++++++++++++
 .../mv/rewrite/MVFilterAndJoinTest.scala           | 70 ++++++++++++++++++++++
 .../carbondata/mv/rewrite/MVInvalidTestCase.scala  | 47 +++++++++++++++
 3 files changed, 172 insertions(+)

diff --git a/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVExceptionTestCase.scala b/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVExceptionTestCase.scala
new file mode 100644
index 0000000..7823d46
--- /dev/null
+++ b/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVExceptionTestCase.scala
@@ -0,0 +1,55 @@
+/*
+ * 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.mv.rewrite
+
+import org.apache.carbondata.common.exceptions.sql.MalformedDataMapCommandException
+import org.apache.spark.sql.catalyst.analysis.NoSuchTableException
+import org.apache.spark.sql.test.util.QueryTest
+import org.scalatest.BeforeAndAfterAll
+
+class MVExceptionTestCase  extends QueryTest with BeforeAndAfterAll {
+  override def beforeAll: Unit = {
+    drop()
+    sql("create table main_table (name string,age int,height int) stored by 'carbondata'")
+  }
+
+  test("test mv no base table") {
+    val ex = intercept[NoSuchTableException] {
+      sql("create datamap main_table_mv on table main_table_error using 'mv' as select sum(age),name from main_table group by name")
+    }
+    assertResult("Table or view 'main_table_error' not found in database 'default';")(ex.getMessage())
+  }
+
+  test("test mv reduplicate mv table") {
+    val ex = intercept[MalformedDataMapCommandException] {
+      sql("create datamap main_table_mv1 on table main_table using 'mv' as select sum(age),name from main_table group by name")
+      sql("create datamap main_table_mv1 on table main_table using 'mv' as select sum(age),name from main_table group by name")
+    }
+    assertResult("DataMap with name main_table_mv1 already exists in storage")(ex.getMessage)
+  }
+
+  def drop(): Unit = {
+    sql("drop table IF EXISTS main_table")
+    sql("drop table if exists main_table_error")
+    sql("drop datamap if exists main_table_mv")
+    sql("drop datamap if exists main_table_mv1")
+  }
+
+  override def afterAll(): Unit = {
+    drop()
+  }
+}
diff --git a/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVFilterAndJoinTest.scala b/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVFilterAndJoinTest.scala
new file mode 100644
index 0000000..0f1301c
--- /dev/null
+++ b/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVFilterAndJoinTest.scala
@@ -0,0 +1,70 @@
+/*
+ * 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.mv.rewrite
+
+import org.apache.spark.sql.Row
+import org.apache.spark.sql.test.util.QueryTest
+import org.scalatest.BeforeAndAfterAll
+
+class MVFilterAndJoinTest extends QueryTest with BeforeAndAfterAll {
+
+  override def beforeAll(): Unit = {
+    drop
+    sql("create table main_table (name string,age int,height int) stored by 'carbondata'")
+    sql("create table dim_table (name string,age int,height int) stored by 'carbondata'")
+    sql("create table sdr_table (name varchar(20),score int) stored by 'carbondata'")
+  }
+
+  def drop() {
+    sql("drop table if exists main_table")
+    sql("drop datamap if exists main_table_mv")
+    sql("drop table if exists dim_table")
+    sql("drop table if exists sdr_table")
+    sql("drop datamap if exists main_table_mv1")
+  }
+
+  test("test mv no filter and query with filter") {
+    val querySQL = "select sum(age),name from main_table where name = 'tom' group by name"
+    sql("insert into main_table select 'tom',20,170")
+    sql("insert into main_table select 'lily',30,160")
+    sql("create datamap main_table_mv on table main_table using 'mv' as select sum(age),name from main_table group by name")
+    sql("rebuild datamap main_table_mv")
+    assert(TestUtil.verifyMVDataMap(sql(querySQL).queryExecution.analyzed, "main_table_mv"))
+    checkAnswer(sql(querySQL), Seq(Row(20,"tom")))
+  }
+
+  test("test mv rebuild twice and varchar string") {
+    val querySQL = "select A.sum_score,A.name from (select sum(score) as sum_score,age,sdr.name as name from sdr_table sdr " +
+      "left join dim_table dim on sdr.name = dim.name where sdr.name in ('tom','lily') group by sdr.name,age) A where name = 'tom'"
+    sql("insert into dim_table select 'tom',20,170")
+    sql("insert into dim_table select 'lily',30,160")
+    sql("create datamap main_table_mv1  using 'mv' " +
+      "as select count(score),sum(score),count(dim.name),age,sdr.name from sdr_table sdr left join dim_table dim on sdr.name = dim.name group by sdr.name,age")
+    sql("rebuild datamap main_table_mv1")
+    sql("insert into sdr_table select 'tom',70")
+    sql("insert into sdr_table select 'tom',50")
+    sql("insert into sdr_table select 'lily',80")
+    sql("rebuild datamap main_table_mv1")
+    assert(TestUtil.verifyMVDataMap(sql(querySQL).queryExecution.analyzed, "main_table_mv1"))
+    checkAnswer(sql(querySQL), Seq(Row(120,"tom")))
+  }
+
+  override def afterAll(): Unit = {
+    drop
+  }
+
+}
diff --git a/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVInvalidTestCase.scala b/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVInvalidTestCase.scala
new file mode 100644
index 0000000..cd57564
--- /dev/null
+++ b/datamap/mv/core/src/test/scala/org/apache/carbondata/mv/rewrite/MVInvalidTestCase.scala
@@ -0,0 +1,47 @@
+/*
+ * 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.mv.rewrite
+
+import org.apache.spark.sql.test.util.QueryTest
+import org.scalatest.BeforeAndAfterAll
+
+class MVInvalidTestCase  extends QueryTest with BeforeAndAfterAll {
+
+  override def beforeAll(): Unit = {
+    drop
+    sql("create table main_table (name string,age int,height int) stored by 'carbondata'")
+  }
+
+  def drop {
+    sql("drop datamap if exists main_table_mv")
+    sql("drop table if exists main_table")
+  }
+
+  test("test mv different filter") {
+    val querySQL = "select age,name from main_table where name = 'lily' order by name limit 10"
+    sql("insert into main_table select 'tom',20,170")
+    sql("insert into main_table select 'lily',30,160")
+    sql("create datamap main_table_mv on table main_table using 'mv' as select age,name,height from main_table where name = 'tom'")
+    sql("rebuild datamap main_table_mv")
+
+    assert(!TestUtil.verifyMVDataMap(sql(querySQL).queryExecution.analyzed, "main_table_mv"))
+  }
+
+  override def afterAll(): Unit = {
+    drop
+  }
+}