Github user kunal642 commented on a diff in the pull request: https://github.com/apache/carbondata/pull/2501#discussion_r202904751 --- Diff: integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala --- @@ -712,5 +713,166 @@ class TestComplexDataType extends QueryTest with BeforeAndAfterAll { checkAnswer(sql("select a.b,id,a.c,person.detail[0],d.e,d.f,person.detail[1],id from test"),Seq(Row(2,1,3,5,3,2,6,1))) checkAnswer(sql("select a.b,id,a.c,person.detail[0],d.e,d.f,person.detail[1],id,1,a.b from test"),Seq(Row(2,1,3,5,3,2,6,1,1,2))) } - + + test("test block Update for complex datatype") { + sql("DROP TABLE IF EXISTS test") + sql("create table test(id int,a struct<b:int,c:int>,d array<int>) stored by 'carbondata'") + sql("insert into test values(1,'2$3',4)") + val structException = intercept[MalformedCarbonCommandException]( + sql("update test set(a.b)=(4) where id=1").show(false)) + assertResult("Unsupported operation on Complex data type")(structException.getMessage) + val arrayException = intercept[MalformedCarbonCommandException]( + sql("update test set(a)=(4) where id=1").show(false)) + assertResult("Unsupported operation on Complex data type")(arrayException.getMessage) + } + + test("test block partition column") { + sql("DROP TABLE IF EXISTS list_table_area_origin") + val arrayException = intercept[AnalysisException]( + sql(""" + | CREATE TABLE IF NOT EXISTS list_table_area_origin + | ( + | id Int, + | vin string, + | logdate Timestamp, + | phonenumber Long, + | country array<string>, + | salary Int + | ) + | PARTITIONED BY (area array<string>) + | STORED BY 'carbondata' + """.stripMargin)) + assertResult("Cannot use array<string> for partition column;")(arrayException.getMessage) + sql("DROP TABLE IF EXISTS list_table_area_origin") + val structException = intercept[AnalysisException]( + sql(""" + | CREATE TABLE IF NOT EXISTS list_table_area_origin + | ( + | id Int, + | vin string, + | logdate Timestamp, + | phonenumber Long, + | country array<string>, + | salary Int + | ) + | PARTITIONED BY (area struct<b:int>) + | STORED BY 'carbondata' + """.stripMargin) + ) + assertResult("Cannot use struct<b:int> for partition column;")(structException.getMessage) + } + + test("test block preaggregate") { + sql("DROP TABLE IF EXISTS test") + sql("create table test(id int,a struct<b:int>) stored by 'carbondata'") + sql("insert into test values (1,2)") + sql("insert into test values (1,2)") + sql("insert into test values (1,2)") + val structException = intercept[MalformedCarbonCommandException]( + sql("create datamap preagg_sum on table test using 'preaggregate' as select id,sum(a.b) from test group by id")) + assertResult("Preaggregate is unsupported for ComplexData type column: a.b")(structException.getMessage) + sql("DROP TABLE IF EXISTS test") + sql("create table test(id int,a array<int>) stored by 'carbondata'") + sql("insert into test values (1,2)") + val arrayException = intercept[MalformedCarbonCommandException]( + sql("create datamap preagg_sum on table test using 'preaggregate' as select id,sum(a[0]) from test group by id")) + assertResult("Preaggregate is unsupported for ComplexData type column: a[0]")(arrayException.getMessage) + } + + test("test block dictionary exclude for child column") { + sql("DROP TABLE IF EXISTS table1") + sql( + "create table table1 (roll int,a struct<b:int,c:string,d:int,e:string,f:struct<g:int," + + "h:string,i:int>,j:int>) stored " + + "by " + + "'carbondata' tblproperties('dictionary_exclude'='a')") + sql("insert into table1 values(1,'1$abc$2$efg$3:mno:4$5')") + checkAnswer(sql("select a.b from table1"), Seq(Row(1))) + sql("DROP TABLE IF EXISTS table1") + val structException = intercept[MalformedCarbonCommandException]( + sql( + "create table table1 (roll int,a struct<b:int,c:string,d:int,e:string,f:struct<g:int," + + "h:string,i:int>,j:int>) stored " + + "by " + + "'carbondata' tblproperties('dictionary_exclude'='a.b')")) + assertResult( + "DICTIONARY_EXCLUDE column: a.b does not exist in table or unsupported for complex child " + + "column. Please check create table statement.")( + structException.getMessage) + sql("DROP TABLE IF EXISTS table1") + val arrayException = intercept[MalformedCarbonCommandException]( + sql( + "create table table1 (roll int,a array<int>) stored " + + "by " + + "'carbondata' tblproperties('dictionary_exclude'='a[0]')")) + assertResult( + "DICTIONARY_EXCLUDE column: a[0] does not exist in table or unsupported for complex child " + + "column. Please check create table statement.")( + arrayException.getMessage) + } + + test("test block dictionary include for child column") { + sql("DROP TABLE IF EXISTS table1") + val structException = intercept[MalformedCarbonCommandException]( + sql( + "create table table1 (roll int,a struct<b:int,c:string,d:int,e:string,f:struct<g:int," + + "h:string,i:int>,j:int>) stored " + + "by " + + "'carbondata' tblproperties('dictionary_include'='a.b')")) + assertResult( + "DICTIONARY_INCLUDE column: a.b does not exist in table or unsupported for complex child " + + "column. Please check create table statement.")( + structException.getMessage) + sql("DROP TABLE IF EXISTS table1") + val arrayException = intercept[MalformedCarbonCommandException]( + sql( + "create table table1 (roll int,a array<int>) stored " + + "by " + + "'carbondata' tblproperties('dictionary_include'='a[0]')")) + assertResult( + "DICTIONARY_INCLUDE column: a[0] does not exist in table or unsupported for complex child " + + "column. Please check create table statement.")( + arrayException.getMessage) + } + + test("test block compaction") { + sql("DROP TABLE IF EXISTS table1") + sql( + "create table table1 (roll int,person Struct<detail:int,age:string,height:double>) stored " + + "by 'carbondata'") + sql( + "load data inpath '" + resourcesPath + + "/Struct.csv' into table table1 options('delimiter'=','," + + "'quotechar'='\"','fileheader'='roll,person','complex_delimiter_level_1'='$'," + + "'complex_delimiter_level_2'='&')") + sql( + "load data inpath '" + resourcesPath + + "/Struct.csv' into table table1 options('delimiter'=','," + + "'quotechar'='\"','fileheader'='roll,person','complex_delimiter_level_1'='$'," + + "'complex_delimiter_level_2'='&')") + val exception = intercept[MalformedCarbonCommandException]( + sql("alter table table1 compact 'major'").show(false)) + assertResult( + "Compaction is unsupported for Table containing Complex Columns")( + exception.getMessage) + val exception1 = intercept[MalformedCarbonCommandException]( + sql("alter table table1 compact 'minor'").show(false)) --- End diff -- remove .show from from all queries
---