This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit d27992f84411e2b6d2d4c6265e5c64a8081547db Author: Tiewei Fang <43782773+bepppo...@users.noreply.github.com> AuthorDate: Fri Jul 19 14:37:51 2024 +0800 [fix](trino-connector) Refactor some code of trino-connector jni reader (#37302) Previously, TrinoConnectorJniScanner converted Trino types to Hive types, and then to Doris types. In fact, the Hive type can be directly obtained from `columns_types`. In this way, the step of converting Trino types to Hive types can be deleted. --- .../format/table/trino_connector_jni_reader.cpp | 5 +- .../trinoconnector/TrinoConnectorJniScanner.java | 16 +-- .../TrinoTypeToHiveTypeTranslator.java | 115 --------------------- 3 files changed, 12 insertions(+), 124 deletions(-) diff --git a/be/src/vec/exec/format/table/trino_connector_jni_reader.cpp b/be/src/vec/exec/format/table/trino_connector_jni_reader.cpp index b72da757629..eaced8572b9 100644 --- a/be/src/vec/exec/format/table/trino_connector_jni_reader.cpp +++ b/be/src/vec/exec/format/table/trino_connector_jni_reader.cpp @@ -43,9 +43,11 @@ TrinoConnectorJniReader::TrinoConnectorJniReader( RuntimeProfile* profile, const TFileRangeDesc& range) : JniReader(file_slot_descs, state, profile) { std::vector<std::string> column_names; + std::vector<std::string> column_types; for (const auto& desc : _file_slot_descs) { std::string field = desc->col_name(); column_names.emplace_back(field); + column_types.emplace_back(JniConnector::get_jni_type(desc->type())); } std::map<String, String> params = { {"catalog_name", range.table_format_params.trino_connector_params.catalog_name}, @@ -63,7 +65,8 @@ TrinoConnectorJniReader::TrinoConnectorJniReader( range.table_format_params.trino_connector_params.trino_connector_predicate}, {"trino_connector_trascation_handle", range.table_format_params.trino_connector_params.trino_connector_trascation_handle}, - {"required_fields", join(column_names, ",")}}; + {"required_fields", join(column_names, ",")}, + {"columns_types", join(column_types, "#")}}; // Used to create trino connector options for (const auto& kv : diff --git a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java index af20668081d..6b15abfa413 100644 --- a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java +++ b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java @@ -129,11 +129,16 @@ public class TrinoConnectorJniScanner extends JniScanner { public TrinoConnectorJniScanner(int batchSize, Map<String, String> params) { - catalogNameString = params.get("catalog_name"); - super.batchSize = batchSize; - super.fields = params.get("required_fields").split(","); + String[] requiredFields = params.get("required_fields").split(","); + String[] requiredTypes = params.get("columns_types").split("#"); + ColumnType[] columnTypes = new ColumnType[requiredTypes.length]; + for (int i = 0; i < requiredTypes.length; i++) { + columnTypes[i] = ColumnType.parseType(requiredFields[i], requiredTypes[i]); + } + initTableInfo(columnTypes, requiredFields, batchSize); appendDataTimeNs = new long[fields.length]; + catalogNameString = params.get("catalog_name"); connectorSplitString = params.get("trino_connector_split"); connectorTableHandleString = params.get("trino_connector_table_handle"); connectorColumnHandleString = params.get("trino_connector_column_handles"); @@ -336,7 +341,6 @@ public class TrinoConnectorJniScanner extends JniScanner { } private void parseRequiredTypes() { - ColumnType[] columnTypes = new ColumnType[fields.length]; appendDataTimeNs = new long[fields.length]; trinoTypeList = Lists.newArrayList(); for (int i = 0; i < fields.length; i++) { @@ -345,12 +349,8 @@ public class TrinoConnectorJniScanner extends JniScanner { throw new RuntimeException(String.format("Cannot find field %s in schema %s", fields[i], trinoConnectorAllFieldNames)); } - trinoTypeList.add(columnMetadataList.get(index).getType()); - String hiveType = TrinoTypeToHiveTypeTranslator.fromTrinoTypeToHiveType(trinoTypeList.get(i)); - columnTypes[i] = ColumnType.parseType(fields[i], hiveType); } - super.types = columnTypes; } private Session createSession(TrinoConnectorServicesProvider trinoConnectorServicesProvider) { diff --git a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoTypeToHiveTypeTranslator.java b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoTypeToHiveTypeTranslator.java deleted file mode 100644 index 4948e5067a3..00000000000 --- a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoTypeToHiveTypeTranslator.java +++ /dev/null @@ -1,115 +0,0 @@ -// 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.doris.trinoconnector; - -import io.trino.spi.type.ArrayType; -import io.trino.spi.type.BigintType; -import io.trino.spi.type.BooleanType; -import io.trino.spi.type.CharType; -import io.trino.spi.type.DateType; -import io.trino.spi.type.DecimalType; -import io.trino.spi.type.DoubleType; -import io.trino.spi.type.IntegerType; -import io.trino.spi.type.MapType; -import io.trino.spi.type.RealType; -import io.trino.spi.type.RowType; -import io.trino.spi.type.SmallintType; -import io.trino.spi.type.TimeType; -import io.trino.spi.type.TimestampType; -import io.trino.spi.type.TimestampWithTimeZoneType; -import io.trino.spi.type.TinyintType; -import io.trino.spi.type.Type; -import io.trino.spi.type.VarbinaryType; -import io.trino.spi.type.VarcharType; - -public final class TrinoTypeToHiveTypeTranslator { - private TrinoTypeToHiveTypeTranslator() { - } - - // trino do not support LargeInt - public static String fromTrinoTypeToHiveType(Type type) { - if (type instanceof BooleanType) { - return "boolean"; - } else if (type instanceof TinyintType) { - return "tinyint"; - } else if (type instanceof SmallintType) { - return "smallint"; - } else if (type instanceof IntegerType) { - return "int"; - } else if (type instanceof BigintType) { - return "bigint"; - } else if (type instanceof RealType) { - return "float"; - } else if (type instanceof DoubleType) { - return "double"; - } else if (type instanceof CharType) { - return type.toString(); - } else if (type instanceof VarcharType) { - return "string"; - } else if (type instanceof VarbinaryType) { - return "string"; - } else if (type instanceof DecimalType) { - StringBuilder sb = new StringBuilder("decimal"); - sb.append("("); - sb.append(((DecimalType) type).getPrecision()); - sb.append(", "); - sb.append(((DecimalType) type).getScale()); - sb.append(")"); - return sb.toString(); - } else if (type instanceof TimeType) { - return "string"; - } else if (type instanceof DateType) { - return "date"; - } else if (type instanceof TimestampType) { - return "timestamp"; - } else if (type instanceof TimestampWithTimeZoneType) { - return "timestamp"; - } else if (type instanceof ArrayType) { - StringBuilder sb = new StringBuilder(); - sb.append("array<") - .append(fromTrinoTypeToHiveType(((ArrayType) type).getElementType())) - .append(">"); - return sb.toString(); - } else if (type instanceof MapType) { - StringBuilder sb = new StringBuilder(); - sb.append("map<") - .append(fromTrinoTypeToHiveType(((MapType) type).getKeyType())) - .append(",") - .append(fromTrinoTypeToHiveType(((MapType) type).getValueType())); - sb.append(">"); - return sb.toString(); - } else if (type instanceof RowType) { - StringBuilder sb = new StringBuilder(); - sb.append("struct<"); - for (int i = 0; i < type.getTypeParameters().size(); ++i) { - if (i != 0) { - sb.append(","); - } - Type field = type.getTypeParameters().get(i); - sb.append(field.getDisplayName()) - .append(":") - .append(fromTrinoTypeToHiveType(field)); - } - sb.append(">"); - return sb.toString(); - } else { - throw new IllegalArgumentException("Cannot transform unknown type: " + type); - } - } -} - --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org