From 5e2748d2b4decce50861cf9496f65af19a37bc98 Mon Sep 17 00:00:00 2001 From: amory Date: Sat, 12 Aug 2023 07:06:12 +0800 Subject: [PATCH] [Improve](complex-type)update orc reader for complex type and add regress tests (#22856) --- be/src/vec/exec/format/orc/vorc_reader.cpp | 20 ------- .../external_table_p0/tvf/complex_type.orc | Bin 0 -> 36574 bytes .../tvf/complex_type.parquet | Bin 0 -> 38300 bytes .../tvf/test_local_tvf_with_complex_type.out | 56 ++++++++++++++++++ regression-test/pipeline/p0/conf/be.conf | 1 + .../tvf/test_local_tvf.groovy | 20 ++++--- .../test_local_tvf_with_complex_type.groovy | 38 ++++++++++++ 7 files changed, 107 insertions(+), 28 deletions(-) create mode 100644 regression-test/data/external_table_p0/tvf/complex_type.orc create mode 100644 regression-test/data/external_table_p0/tvf/complex_type.parquet create mode 100644 regression-test/data/external_table_p0/tvf/test_local_tvf_with_complex_type.out create mode 100644 regression-test/suites/external_table_p0/tvf/test_local_tvf_with_complex_type.groovy diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp b/be/src/vec/exec/format/orc/vorc_reader.cpp index 2e053a298a..130d06bea8 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.cpp +++ b/be/src/vec/exec/format/orc/vorc_reader.cpp @@ -1291,11 +1291,6 @@ Status OrcReader::_orc_column_to_doris_column(const std::string& col_name, reinterpret_cast(remove_nullable(data_type).get()) ->get_nested_type()); const orc::Type* nested_orc_type = orc_column_type->getSubtype(0); - if (nested_orc_type->getKind() == orc::TypeKind::MAP || - nested_orc_type->getKind() == orc::TypeKind::STRUCT) { - return Status::InternalError( - "Array does not support nested map/struct type in column {}", col_name); - } return _orc_column_to_doris_column( col_name, static_cast(*data_column).get_data_ptr(), nested_type, nested_orc_type, orc_list->elements.get(), element_size); @@ -1317,15 +1312,6 @@ Status OrcReader::_orc_column_to_doris_column(const std::string& col_name, ->get_value_type()); const orc::Type* orc_key_type = orc_column_type->getSubtype(0); const orc::Type* orc_value_type = orc_column_type->getSubtype(1); - if (orc_key_type->getKind() == orc::TypeKind::LIST || - orc_key_type->getKind() == orc::TypeKind::MAP || - orc_key_type->getKind() == orc::TypeKind::STRUCT || - orc_value_type->getKind() == orc::TypeKind::LIST || - orc_value_type->getKind() == orc::TypeKind::MAP || - orc_value_type->getKind() == orc::TypeKind::STRUCT) { - return Status::InternalError("Map does not support nested complex type in column {}", - col_name); - } const ColumnPtr& doris_key_column = doris_map.get_keys_ptr(); const ColumnPtr& doris_value_column = doris_map.get_values_ptr(); RETURN_IF_ERROR(_orc_column_to_doris_column(col_name, doris_key_column, @@ -1349,12 +1335,6 @@ Status OrcReader::_orc_column_to_doris_column(const std::string& col_name, for (int i = 0; i < doris_struct.tuple_size(); ++i) { orc::ColumnVectorBatch* orc_field = orc_struct->fields[i]; const orc::Type* orc_type = orc_column_type->getSubtype(i); - if (orc_type->getKind() == orc::TypeKind::LIST || - orc_type->getKind() == orc::TypeKind::MAP || - orc_type->getKind() == orc::TypeKind::STRUCT) { - return Status::InternalError( - "Struct does not support nested complex type in column {}", col_name); - } const ColumnPtr& doris_field = doris_struct.get_column_ptr(i); const DataTypePtr& doris_type = doris_struct_type->get_element(i); RETURN_IF_ERROR(_orc_column_to_doris_column( diff --git a/regression-test/data/external_table_p0/tvf/complex_type.orc b/regression-test/data/external_table_p0/tvf/complex_type.orc new file mode 100644 index 0000000000000000000000000000000000000000..230686455174717b700bee8613077428e96bb59e GIT binary patch literal 36574 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%0A5fg-YJ!IIq1URIu zI5_ljnS7b<;3&+6#Bo%gu*luQ!SI~(LktJAz@$DVDLxKnfo4vLlZ{LYhnY2`lwvq| zgg6+PSUGux#AKwHGE=136N`%C6N`!fRZ(K%U{+$~;1XiwWfx#kV&Y)u6jESQV&mWzVq)iD73N^#;O7)i z;8GIf;1Oct=87c?OyN~$VCFPu;p1l&V0C5@5MP5n`5U}m*t;A5PiA}cS& zl$a>Rl$*=BoI#FNnYErpL6LP|4HE~ufs_@vjIqKjW2~TMj1{zuv7)$)u@VgW5Cbb? ztSBvGtT4+ME5TG~`C>&``C^4xzF2|E7b|f2a)ZqBMK?)6)Cy9%#E@CKSP@maSY8rA zD^{$a#fla2#flZKV#NwvtXNT4tXN?yR;-9BR;)a)GO+m`qO@QUVYdPmEM}l$<%12m m<%+`uKMw|uyBq>c5)BO;N=ytq8dup2*qXjDGy4ZQO9B9@BD(AV literal 0 HcmV?d00001 diff --git a/regression-test/data/external_table_p0/tvf/complex_type.parquet b/regression-test/data/external_table_p0/tvf/complex_type.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1549313f5978940fdabc25ab320e3473f9996eb0 GIT binary patch literal 38300 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 0) def be_id = table[0][0] + List> doris_log = sql """ ADMIN SHOW FRONTEND CONFIG like "sys_log_dir"; """ + assertTrue(doris_log.size() > 0) + def doris_log_path = doris_log[0][1] + table = sql """ select count(*) from local( - "file_path" = "log/be.out", + "file_path" = "${doris_log_path}/fe.out", "backend_id" = "${be_id}", "format" = "csv") - where c1 like "%start_time%";""" + where c1 like "%FE type%";""" assertTrue(table.size() > 0) assertTrue(Long.valueOf(table[0][0]) > 0) table = sql """ select count(*) from local( - "file_path" = "log/*.out", + "file_path" = "${doris_log_path}/*.out", "backend_id" = "${be_id}", "format" = "csv") - where c1 like "%start_time%";""" + where c1 like "%FE type%";""" assertTrue(table.size() > 0) assertTrue(Long.valueOf(table[0][0]) > 0) @@ -44,10 +48,10 @@ suite("test_local_tvf") { test { sql """ select count(*) from local( - "file_path" = "../log/be.out", + "file_path" = "../fe.out", "backend_id" = "${be_id}", "format" = "csv") - where c1 like "%start_time%"; + where c1 like "%FE type%"; """ // check exception message contains exception "can not contain '..' in path" @@ -56,10 +60,10 @@ suite("test_local_tvf") { test { sql """ select count(*) from local( - "file_path" = "./log/xx.out", + "file_path" = "./xx.out", "backend_id" = "${be_id}", "format" = "csv") - where c1 like "%start_time%"; + where c1 like "%FE type%"; """ // check exception message contains exception "No matches found" diff --git a/regression-test/suites/external_table_p0/tvf/test_local_tvf_with_complex_type.groovy b/regression-test/suites/external_table_p0/tvf/test_local_tvf_with_complex_type.groovy new file mode 100644 index 0000000000..d7271501d8 --- /dev/null +++ b/regression-test/suites/external_table_p0/tvf/test_local_tvf_with_complex_type.groovy @@ -0,0 +1,38 @@ +// 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. + +// This suit test the `backends` tvf +suite("test_local_tvf_with_complex_type", "p0") { + List> table = sql """ select * from backends(); """ + assertTrue(table.size() > 0) + def be_id = table[0][0] + def dataFilePath = context.config.dataPath + "/external_table_p0/tvf/" + + qt_sql """ + select * from local( + "file_path" = "${dataFilePath}/complex_type.orc", + "backend_id" = "${be_id}", + "format" = "orc");""" + + + qt_sql """ + select * from local( + "file_path" = "${dataFilePath}/complex_type.parquet", + "backend_id" = "${be_id}", + "format" = "parquet"); """ + +}