[ https://issues.apache.org/jira/browse/HAWQ-703?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15276954#comment-15276954 ]
ASF GitHub Bot commented on HAWQ-703: ------------------------------------- Github user sansanichfb commented on a diff in the pull request: https://github.com/apache/incubator-hawq/pull/633#discussion_r62565599 --- Diff: pxf/pxf-hive/src/main/java/org/apache/hawq/pxf/plugins/hive/utilities/EnumHiveToHawqType.java --- @@ -0,0 +1,113 @@ +/* + * 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.hawq.pxf.plugins.hive.utilities; + +import org.apache.hawq.pxf.api.utilities.EnumHawqType; +import org.apache.hawq.pxf.api.UnsupportedTypeException; + +/** + * + * Hive types, which are supported by plugin, mapped to HAWQ's types + * @see EnumHawqType + */ +public enum EnumHiveToHawqType { + + TinyintType("tinyint", EnumHawqType.Int2Type), + SmallintType("smallint", EnumHawqType.Int2Type), + IntType("int", EnumHawqType.Int4Type), + BigintType("bigint", EnumHawqType.Int8Type), + BooleanType("boolean", EnumHawqType.BoolType), + FloatType("float", EnumHawqType.Float4Type), + DoubleType("double", EnumHawqType.Float8Type), + StringType("string", EnumHawqType.TextType), + BinaryType("binary", EnumHawqType.ByteaType), + TimestampType("timestamp", EnumHawqType.TimestampType), + DateType("date", EnumHawqType.DateType), + DecimalType("decimal", EnumHawqType.NumericType, "[(,)]"), + VarcharType("varchar", EnumHawqType.VarcharType, "[(,)]"), + CharType("char", EnumHawqType.BpcharType, "[(,)]"), + ArrayType("array", EnumHawqType.TextType, "[<,>]"), + MapType("map", EnumHawqType.TextType, "[<,>]"), + StructType("struct", EnumHawqType.TextType, "[<,>]"), + UnionType("uniontype", EnumHawqType.TextType, "[<,>]"); + + private String typeName; + private EnumHawqType hawqType; + private String splitExpression; + + EnumHiveToHawqType(String typeName, EnumHawqType hawqType) { + this.typeName = typeName; + this.hawqType = hawqType; + } + + EnumHiveToHawqType(String typeName, EnumHawqType hawqType, String splitExpression) { + this(typeName, hawqType); + this.splitExpression = splitExpression; + } + + /** + * + * @return name of type + */ + public String getTypeName() { + return this.typeName; + } + + /** + * + * @return corresponding HAWQ type + */ + public EnumHawqType getHawqType() { + return this.hawqType; + } + + /** + * + * @return split by expression + */ + public String getSplitExpression() { + return this.splitExpression; + } + + /** + * Returns Hive to HAWQ type mapping entry for given Hive type + * + * @param hiveType full Hive type with modifiers, for example - decimal(10, 0), char(5), binary, array<string>, map<string,float> etc + * @return corresponding Hive to HAWQ type mapping entry + * @throws UnsupportedTypeException if there is no corresponding HAWQ type + */ + public static EnumHiveToHawqType getHiveToHawqType(String hiveType) { + for (EnumHiveToHawqType t : values()) { + String hiveTypeName = hiveType; + String splitExpression = t.getSplitExpression(); + if (splitExpression != null) { + String[] tokens = hiveType.split(splitExpression); + hiveTypeName = tokens[0]; + } + + if (t.getTypeName().toLowerCase().equals(hiveTypeName.toLowerCase())) { --- End diff -- As it is enum, and instances creation are controlled by itself, getTypeName() will always return not null value > Serialize HCatalog Complex Types to plain text (as Hive profile) > ---------------------------------------------------------------- > > Key: HAWQ-703 > URL: https://issues.apache.org/jira/browse/HAWQ-703 > Project: Apache HAWQ > Issue Type: New Feature > Components: Hcatalog, PXF > Reporter: Oleksandr Diachenko > Assignee: Oleksandr Diachenko > > As for now user is able to create external HAWQ table on top of Hive table > with complex types(LIST, MAP, STRUCT, UNION) and those types are being > serialized as TEXT. > But if user uses HCatalog integration feature and queries Hive tables having > compex type columns through HAWQ he/she gets error. > The goal is to serialize complex types to text when using HCatalog > integration. > Changes required: > - PXF: > -- add sourceType field to getMetadata endpoint. > - HAWQ: > -- master: > --- update stored procedure pxf_get_item_fields, add sourceType field to > responce. > -- psql: > --- update describe logic for Hive tables to show sourceType column in \d(\d+) -- This message was sent by Atlassian JIRA (v6.3.4#6332)