From 2bf8de5993226d65c10ebce577f4e08229291801 Mon Sep 17 00:00:00 2001 From: Indhumathi27 Date: Thu, 27 Dec 2018 17:32:48 +0530 Subject: [PATCH] [CARBONDATA-3205]Fix Get Local Dictionary for empty Array of Struct --- .../chunk/impl/DimensionRawColumnChunk.java | 6 +++-- .../src/test/resources/test_json.json | 1 + ...reateTableUsingSparkCarbonFileFormat.scala | 22 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 integration/spark-datasource/src/test/resources/test_json.json diff --git a/core/src/main/java/org/apache/carbondata/core/datastore/chunk/impl/DimensionRawColumnChunk.java b/core/src/main/java/org/apache/carbondata/core/datastore/chunk/impl/DimensionRawColumnChunk.java index 9d798bd4b00..ccf0a0e2c41 100644 --- a/core/src/main/java/org/apache/carbondata/core/datastore/chunk/impl/DimensionRawColumnChunk.java +++ b/core/src/main/java/org/apache/carbondata/core/datastore/chunk/impl/DimensionRawColumnChunk.java @@ -208,8 +208,10 @@ public static CarbonDictionary getDictionary(LocalDictionaryChunk localDictionar } } decode.freeMemory(); - // as dictionary values starts from 1 setting null default value - dictionary[1] = CarbonCommonConstants.MEMBER_DEFAULT_VAL_ARRAY; + if (!usedDictionary.isEmpty()) { + // as dictionary values starts from 1 setting null default value + dictionary[1] = CarbonCommonConstants.MEMBER_DEFAULT_VAL_ARRAY; + } return new CarbonDictionaryImpl(dictionary, usedDictionary.cardinality()); } return null; diff --git a/integration/spark-datasource/src/test/resources/test_json.json b/integration/spark-datasource/src/test/resources/test_json.json new file mode 100644 index 00000000000..6884ecd0df3 --- /dev/null +++ b/integration/spark-datasource/src/test/resources/test_json.json @@ -0,0 +1 @@ +{"username":"cust","age":20,"phone":"5367288","housenum":"A780","address": {"Address_Detail": {"Building_Detail": {"Society_name":"xxxyy","building_no":"A780","house_no":4,"Building_Type": {"Buildingname":"abcd","buildingarea":100.3,"Building_Criteria":{"f1": {"username1":"cust0","age1":20,"phone1":682973,"housenum1":"A899","address1":{"Address_Detail1": {"Building_Detail1": {"Society_name1":"xxxyy","building_no1":"A780","house_no1":4,"Building_Type1": {"Buildingname1":"abcd","buildingarea1":100.3,"Building_Criteria1":{"f11": 33,"f21":{"inner1":{"children":[]}}},"AR11":["abc","gdf","ehf"],"AR21":[3,4,5],"AR31":[27735,7981366,9873262],"AR41":[9.2436482,686263.09,3.48249824],"AR51":[9.463462333333E7,47.398759828E5,9.2846892E4],"AR61":[true,true]}}}}}},"f2":"er","AR1":["abc","gdf","ehf"],"AR2":[3,4,5],"AR3":[27735,7981366,9873262],"AR4":[9.2436482,686263.09,3.48249824],"AR5":[9.463462333333E7,47.398759828E5,9.2846892E4],"AR6":[true,true]}}}}} \ No newline at end of file diff --git a/integration/spark-datasource/src/test/scala/org/apache/spark/sql/carbondata/datasource/TestCreateTableUsingSparkCarbonFileFormat.scala b/integration/spark-datasource/src/test/scala/org/apache/spark/sql/carbondata/datasource/TestCreateTableUsingSparkCarbonFileFormat.scala index 0d2fcd8abb9..7814878d770 100644 --- a/integration/spark-datasource/src/test/scala/org/apache/spark/sql/carbondata/datasource/TestCreateTableUsingSparkCarbonFileFormat.scala +++ b/integration/spark-datasource/src/test/scala/org/apache/spark/sql/carbondata/datasource/TestCreateTableUsingSparkCarbonFileFormat.scala @@ -299,6 +299,28 @@ class TestCreateTableUsingSparkCarbonFileFormat extends FunSuite with BeforeAndA cleanTestData() } + test("Test complex json nested data with empty array of struct data") { + val rootPath = new File(this.getClass.getResource("/").getPath + + "../../../..").getCanonicalPath + val resource = s"$rootPath/integration/spark-datasource/src/test/resources/test_json.json" + val path = writerPath + "_json" + FileUtils.deleteDirectory(new File(path)) + val json = spark.read.json(s"$resource") + json.write.format("carbon").save(s"$path") + spark.sql("DROP TABLE IF EXISTS test_json") + if (SparkUtil.isSparkVersionEqualTo("2.1")) { + spark.sql(s"""CREATE TABLE test_json USING carbon OPTIONS (PATH '$path') """) + } else if (SparkUtil.isSparkVersionXandAbove("2.2")) { + spark.sql( + s"""CREATE TABLE test_json USING carbon LOCATION + |'$path' """.stripMargin) + } else { + } + assert(spark.sql("select age from test_json").collect().length == 1) + spark.sql("DROP TABLE IF EXISTS test_json") + FileUtils.deleteDirectory(new File(path)) + } + test("Read sdk writer output file without index file should not fail") { buildTestData() deleteIndexFile(writerPath, CarbonCommonConstants.UPDATE_INDEX_FILE_EXT)