You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ja...@apache.org on 2022/07/29 10:29:54 UTC

[flink] branch master updated: [FLINK-28679][hive] HiveServer2 Endpoint supports to build with Hive3 (#20358)

This is an automated email from the ASF dual-hosted git repository.

jark pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new aa624025dce [FLINK-28679][hive] HiveServer2 Endpoint supports to build with Hive3 (#20358)
aa624025dce is described below

commit aa624025dce378da3c11fc3ab6e8cf91fc94c30e
Author: Shengkai <33...@users.noreply.github.com>
AuthorDate: Fri Jul 29 18:29:48 2022 +0800

    [FLINK-28679][hive] HiveServer2 Endpoint supports to build with Hive3 (#20358)
---
 .../table/endpoint/hive/HiveServer2Endpoint.java   |  16 +
 .../hive/service/rpc/thrift/TGetQueryIdReq.java    | 416 ++++++++++++++
 .../hive/service/rpc/thrift/TGetQueryIdResp.java   | 405 ++++++++++++++
 .../hive/service/rpc/thrift/TSetClientInfoReq.java | 600 +++++++++++++++++++++
 .../service/rpc/thrift/TSetClientInfoResp.java     | 410 ++++++++++++++
 .../hive/util/HiveServer2EndpointExtension.java    |   6 +-
 tools/maven/suppressions.xml                       |   1 +
 7 files changed, 1853 insertions(+), 1 deletion(-)

diff --git a/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/endpoint/hive/HiveServer2Endpoint.java b/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/endpoint/hive/HiveServer2Endpoint.java
index 83493260404..7174a4502f2 100644
--- a/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/endpoint/hive/HiveServer2Endpoint.java
+++ b/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/endpoint/hive/HiveServer2Endpoint.java
@@ -72,6 +72,8 @@ import org.apache.hive.service.rpc.thrift.TGetOperationStatusReq;
 import org.apache.hive.service.rpc.thrift.TGetOperationStatusResp;
 import org.apache.hive.service.rpc.thrift.TGetPrimaryKeysReq;
 import org.apache.hive.service.rpc.thrift.TGetPrimaryKeysResp;
+import org.apache.hive.service.rpc.thrift.TGetQueryIdReq;
+import org.apache.hive.service.rpc.thrift.TGetQueryIdResp;
 import org.apache.hive.service.rpc.thrift.TGetResultSetMetadataReq;
 import org.apache.hive.service.rpc.thrift.TGetResultSetMetadataResp;
 import org.apache.hive.service.rpc.thrift.TGetSchemasReq;
@@ -88,6 +90,8 @@ import org.apache.hive.service.rpc.thrift.TOperationHandle;
 import org.apache.hive.service.rpc.thrift.TProtocolVersion;
 import org.apache.hive.service.rpc.thrift.TRenewDelegationTokenReq;
 import org.apache.hive.service.rpc.thrift.TRenewDelegationTokenResp;
+import org.apache.hive.service.rpc.thrift.TSetClientInfoReq;
+import org.apache.hive.service.rpc.thrift.TSetClientInfoResp;
 import org.apache.hive.service.rpc.thrift.TStatus;
 import org.apache.hive.service.rpc.thrift.TStatusCode;
 import org.apache.thrift.TException;
@@ -556,6 +560,18 @@ public class HiveServer2Endpoint implements TCLIService.Iface, SqlGatewayEndpoin
         throw new UnsupportedOperationException(ERROR_MESSAGE);
     }
 
+    // CHECKSTYLE.OFF: MethodName
+    /** To be compatible with Hive3, add a default implementation. */
+    public TGetQueryIdResp GetQueryId(TGetQueryIdReq tGetQueryIdReq) throws TException {
+        throw new UnsupportedOperationException(ERROR_MESSAGE);
+    }
+
+    /** To be compatible with Hive3, add a default implementation. */
+    public TSetClientInfoResp SetClientInfo(TSetClientInfoReq tSetClientInfoReq) throws TException {
+        throw new UnsupportedOperationException(ERROR_MESSAGE);
+    }
+    // CHECKSTYLE.ON: MethodName
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {
diff --git a/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TGetQueryIdReq.java b/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TGetQueryIdReq.java
new file mode 100644
index 00000000000..8fe1d035cf8
--- /dev/null
+++ b/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TGetQueryIdReq.java
@@ -0,0 +1,416 @@
+/*
+ * 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.hive.service.rpc.thrift;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)")
+@org.apache.hadoop.hive.common.classification.InterfaceAudience.Public
+@org.apache.hadoop.hive.common.classification.InterfaceStability.Stable
+public class TGetQueryIdReq
+        implements org.apache.thrift.TBase<TGetQueryIdReq, TGetQueryIdReq._Fields>,
+                java.io.Serializable,
+                Cloneable,
+                Comparable<TGetQueryIdReq> {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC =
+            new org.apache.thrift.protocol.TStruct("TGetQueryIdReq");
+
+    private static final org.apache.thrift.protocol.TField OPERATION_HANDLE_FIELD_DESC =
+            new org.apache.thrift.protocol.TField(
+                    "operationHandle", org.apache.thrift.protocol.TType.STRUCT, (short) 1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY =
+            new TGetQueryIdReqStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY =
+            new TGetQueryIdReqTupleSchemeFactory();
+
+    private TOperationHandle operationHandle; // required
+
+    /**
+     * The set of fields this struct contains, along with convenience methods for finding and
+     * manipulating them.
+     */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+        OPERATION_HANDLE((short) 1, "operationHandle");
+
+        private static final java.util.Map<java.lang.String, _Fields> byName =
+                new java.util.HashMap<java.lang.String, _Fields>();
+
+        static {
+            for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                byName.put(field.getFieldName(), field);
+            }
+        }
+
+        /** Find the _Fields constant that matches fieldId, or null if its not found. */
+        public static _Fields findByThriftId(int fieldId) {
+            switch (fieldId) {
+                case 1: // OPERATION_HANDLE
+                    return OPERATION_HANDLE;
+                default:
+                    return null;
+            }
+        }
+
+        /**
+         * Find the _Fields constant that matches fieldId, throwing an exception if it is not found.
+         */
+        public static _Fields findByThriftIdOrThrow(int fieldId) {
+            _Fields fields = findByThriftId(fieldId);
+            if (fields == null)
+                throw new java.lang.IllegalArgumentException(
+                        "Field " + fieldId + " doesn't exist!");
+            return fields;
+        }
+
+        /** Find the _Fields constant that matches name, or null if its not found. */
+        public static _Fields findByName(java.lang.String name) {
+            return byName.get(name);
+        }
+
+        private final short _thriftId;
+        private final java.lang.String _fieldName;
+
+        _Fields(short thriftId, java.lang.String fieldName) {
+            _thriftId = thriftId;
+            _fieldName = fieldName;
+        }
+
+        public short getThriftFieldId() {
+            return _thriftId;
+        }
+
+        public java.lang.String getFieldName() {
+            return _fieldName;
+        }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData>
+            metaDataMap;
+
+    static {
+        java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap =
+                new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(
+                        _Fields.class);
+        tmpMap.put(
+                _Fields.OPERATION_HANDLE,
+                new org.apache.thrift.meta_data.FieldMetaData(
+                        "operationHandle",
+                        org.apache.thrift.TFieldRequirementType.REQUIRED,
+                        new org.apache.thrift.meta_data.StructMetaData(
+                                org.apache.thrift.protocol.TType.STRUCT, TOperationHandle.class)));
+        metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+        org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(
+                TGetQueryIdReq.class, metaDataMap);
+    }
+
+    public TGetQueryIdReq() {}
+
+    public TGetQueryIdReq(TOperationHandle operationHandle) {
+        this();
+        this.operationHandle = operationHandle;
+    }
+
+    /** Performs a deep copy on <i>other</i>. */
+    public TGetQueryIdReq(TGetQueryIdReq other) {
+        if (other.isSetOperationHandle()) {
+            this.operationHandle = new TOperationHandle(other.operationHandle);
+        }
+    }
+
+    public TGetQueryIdReq deepCopy() {
+        return new TGetQueryIdReq(this);
+    }
+
+    @Override
+    public void clear() {
+        this.operationHandle = null;
+    }
+
+    public TOperationHandle getOperationHandle() {
+        return this.operationHandle;
+    }
+
+    public void setOperationHandle(TOperationHandle operationHandle) {
+        this.operationHandle = operationHandle;
+    }
+
+    public void unsetOperationHandle() {
+        this.operationHandle = null;
+    }
+
+    /**
+     * Returns true if field operationHandle is set (has been assigned a value) and false otherwise
+     */
+    public boolean isSetOperationHandle() {
+        return this.operationHandle != null;
+    }
+
+    public void setOperationHandleIsSet(boolean value) {
+        if (!value) {
+            this.operationHandle = null;
+        }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+        switch (field) {
+            case OPERATION_HANDLE:
+                if (value == null) {
+                    unsetOperationHandle();
+                } else {
+                    setOperationHandle((TOperationHandle) value);
+                }
+                break;
+        }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+        switch (field) {
+            case OPERATION_HANDLE:
+                return getOperationHandle();
+        }
+        throw new java.lang.IllegalStateException();
+    }
+
+    /**
+     * Returns true if field corresponding to fieldID is set (has been assigned a value) and false
+     * otherwise
+     */
+    public boolean isSet(_Fields field) {
+        if (field == null) {
+            throw new java.lang.IllegalArgumentException();
+        }
+
+        switch (field) {
+            case OPERATION_HANDLE:
+                return isSetOperationHandle();
+        }
+        throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+        if (that == null) return false;
+        if (that instanceof TGetQueryIdReq) return this.equals((TGetQueryIdReq) that);
+        return false;
+    }
+
+    public boolean equals(TGetQueryIdReq that) {
+        if (that == null) return false;
+        if (this == that) return true;
+
+        boolean this_present_operationHandle = true && this.isSetOperationHandle();
+        boolean that_present_operationHandle = true && that.isSetOperationHandle();
+        if (this_present_operationHandle || that_present_operationHandle) {
+            if (!(this_present_operationHandle && that_present_operationHandle)) return false;
+            if (!this.operationHandle.equals(that.operationHandle)) return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hashCode = 1;
+
+        hashCode = hashCode * 8191 + ((isSetOperationHandle()) ? 131071 : 524287);
+        if (isSetOperationHandle()) hashCode = hashCode * 8191 + operationHandle.hashCode();
+
+        return hashCode;
+    }
+
+    @Override
+    public int compareTo(TGetQueryIdReq other) {
+        if (!getClass().equals(other.getClass())) {
+            return getClass().getName().compareTo(other.getClass().getName());
+        }
+
+        int lastComparison = 0;
+
+        lastComparison =
+                java.lang.Boolean.valueOf(isSetOperationHandle())
+                        .compareTo(other.isSetOperationHandle());
+        if (lastComparison != 0) {
+            return lastComparison;
+        }
+        if (isSetOperationHandle()) {
+            lastComparison =
+                    org.apache.thrift.TBaseHelper.compareTo(
+                            this.operationHandle, other.operationHandle);
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+        }
+        return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+        return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot)
+            throws org.apache.thrift.TException {
+        scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot)
+            throws org.apache.thrift.TException {
+        scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+        java.lang.StringBuilder sb = new java.lang.StringBuilder("TGetQueryIdReq(");
+        boolean first = true;
+
+        sb.append("operationHandle:");
+        if (this.operationHandle == null) {
+            sb.append("null");
+        } else {
+            sb.append(this.operationHandle);
+        }
+        first = false;
+        sb.append(")");
+        return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+        // check for required fields
+        if (!isSetOperationHandle()) {
+            throw new org.apache.thrift.protocol.TProtocolException(
+                    "Required field 'operationHandle' is unset! Struct:" + toString());
+        }
+
+        // check for sub-struct validity
+        if (operationHandle != null) {
+            operationHandle.validate();
+        }
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+        try {
+            write(
+                    new org.apache.thrift.protocol.TCompactProtocol(
+                            new org.apache.thrift.transport.TIOStreamTransport(out)));
+        } catch (org.apache.thrift.TException te) {
+            throw new java.io.IOException(te);
+        }
+    }
+
+    private void readObject(java.io.ObjectInputStream in)
+            throws java.io.IOException, java.lang.ClassNotFoundException {
+        try {
+            read(
+                    new org.apache.thrift.protocol.TCompactProtocol(
+                            new org.apache.thrift.transport.TIOStreamTransport(in)));
+        } catch (org.apache.thrift.TException te) {
+            throw new java.io.IOException(te);
+        }
+    }
+
+    private static class TGetQueryIdReqStandardSchemeFactory
+            implements org.apache.thrift.scheme.SchemeFactory {
+        public TGetQueryIdReqStandardScheme getScheme() {
+            return new TGetQueryIdReqStandardScheme();
+        }
+    }
+
+    private static class TGetQueryIdReqStandardScheme
+            extends org.apache.thrift.scheme.StandardScheme<TGetQueryIdReq> {
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot, TGetQueryIdReq struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TField schemeField;
+            iprot.readStructBegin();
+            while (true) {
+                schemeField = iprot.readFieldBegin();
+                if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                    break;
+                }
+                switch (schemeField.id) {
+                    case 1: // OPERATION_HANDLE
+                        if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                            struct.operationHandle = new TOperationHandle();
+                            struct.operationHandle.read(iprot);
+                            struct.setOperationHandleIsSet(true);
+                        } else {
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                        }
+                        break;
+                    default:
+                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                }
+                iprot.readFieldEnd();
+            }
+            iprot.readStructEnd();
+            struct.validate();
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot, TGetQueryIdReq struct)
+                throws org.apache.thrift.TException {
+            struct.validate();
+
+            oprot.writeStructBegin(STRUCT_DESC);
+            if (struct.operationHandle != null) {
+                oprot.writeFieldBegin(OPERATION_HANDLE_FIELD_DESC);
+                struct.operationHandle.write(oprot);
+                oprot.writeFieldEnd();
+            }
+            oprot.writeFieldStop();
+            oprot.writeStructEnd();
+        }
+    }
+
+    private static class TGetQueryIdReqTupleSchemeFactory
+            implements org.apache.thrift.scheme.SchemeFactory {
+        public TGetQueryIdReqTupleScheme getScheme() {
+            return new TGetQueryIdReqTupleScheme();
+        }
+    }
+
+    private static class TGetQueryIdReqTupleScheme
+            extends org.apache.thrift.scheme.TupleScheme<TGetQueryIdReq> {
+
+        @Override
+        public void write(org.apache.thrift.protocol.TProtocol prot, TGetQueryIdReq struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TTupleProtocol oprot =
+                    (org.apache.thrift.protocol.TTupleProtocol) prot;
+            struct.operationHandle.write(oprot);
+        }
+
+        @Override
+        public void read(org.apache.thrift.protocol.TProtocol prot, TGetQueryIdReq struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TTupleProtocol iprot =
+                    (org.apache.thrift.protocol.TTupleProtocol) prot;
+            struct.operationHandle = new TOperationHandle();
+            struct.operationHandle.read(iprot);
+            struct.setOperationHandleIsSet(true);
+        }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(
+            org.apache.thrift.protocol.TProtocol proto) {
+        return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme())
+                        ? STANDARD_SCHEME_FACTORY
+                        : TUPLE_SCHEME_FACTORY)
+                .getScheme();
+    }
+}
diff --git a/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TGetQueryIdResp.java b/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TGetQueryIdResp.java
new file mode 100644
index 00000000000..3e705c5ce03
--- /dev/null
+++ b/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TGetQueryIdResp.java
@@ -0,0 +1,405 @@
+/*
+ * 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.hive.service.rpc.thrift;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)")
+@org.apache.hadoop.hive.common.classification.InterfaceAudience.Public
+@org.apache.hadoop.hive.common.classification.InterfaceStability.Stable
+public class TGetQueryIdResp
+        implements org.apache.thrift.TBase<TGetQueryIdResp, TGetQueryIdResp._Fields>,
+                java.io.Serializable,
+                Cloneable,
+                Comparable<TGetQueryIdResp> {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC =
+            new org.apache.thrift.protocol.TStruct("TGetQueryIdResp");
+
+    private static final org.apache.thrift.protocol.TField QUERY_ID_FIELD_DESC =
+            new org.apache.thrift.protocol.TField(
+                    "queryId", org.apache.thrift.protocol.TType.STRING, (short) 1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY =
+            new TGetQueryIdRespStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY =
+            new TGetQueryIdRespTupleSchemeFactory();
+
+    private java.lang.String queryId; // required
+
+    /**
+     * The set of fields this struct contains, along with convenience methods for finding and
+     * manipulating them.
+     */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+        QUERY_ID((short) 1, "queryId");
+
+        private static final java.util.Map<java.lang.String, _Fields> byName =
+                new java.util.HashMap<java.lang.String, _Fields>();
+
+        static {
+            for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                byName.put(field.getFieldName(), field);
+            }
+        }
+
+        /** Find the _Fields constant that matches fieldId, or null if its not found. */
+        public static _Fields findByThriftId(int fieldId) {
+            switch (fieldId) {
+                case 1: // QUERY_ID
+                    return QUERY_ID;
+                default:
+                    return null;
+            }
+        }
+
+        /**
+         * Find the _Fields constant that matches fieldId, throwing an exception if it is not found.
+         */
+        public static _Fields findByThriftIdOrThrow(int fieldId) {
+            _Fields fields = findByThriftId(fieldId);
+            if (fields == null)
+                throw new java.lang.IllegalArgumentException(
+                        "Field " + fieldId + " doesn't exist!");
+            return fields;
+        }
+
+        /** Find the _Fields constant that matches name, or null if its not found. */
+        public static _Fields findByName(java.lang.String name) {
+            return byName.get(name);
+        }
+
+        private final short _thriftId;
+        private final java.lang.String _fieldName;
+
+        _Fields(short thriftId, java.lang.String fieldName) {
+            _thriftId = thriftId;
+            _fieldName = fieldName;
+        }
+
+        public short getThriftFieldId() {
+            return _thriftId;
+        }
+
+        public java.lang.String getFieldName() {
+            return _fieldName;
+        }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData>
+            metaDataMap;
+
+    static {
+        java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap =
+                new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(
+                        _Fields.class);
+        tmpMap.put(
+                _Fields.QUERY_ID,
+                new org.apache.thrift.meta_data.FieldMetaData(
+                        "queryId",
+                        org.apache.thrift.TFieldRequirementType.REQUIRED,
+                        new org.apache.thrift.meta_data.FieldValueMetaData(
+                                org.apache.thrift.protocol.TType.STRING)));
+        metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+        org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(
+                TGetQueryIdResp.class, metaDataMap);
+    }
+
+    public TGetQueryIdResp() {}
+
+    public TGetQueryIdResp(java.lang.String queryId) {
+        this();
+        this.queryId = queryId;
+    }
+
+    /** Performs a deep copy on <i>other</i>. */
+    public TGetQueryIdResp(TGetQueryIdResp other) {
+        if (other.isSetQueryId()) {
+            this.queryId = other.queryId;
+        }
+    }
+
+    public TGetQueryIdResp deepCopy() {
+        return new TGetQueryIdResp(this);
+    }
+
+    @Override
+    public void clear() {
+        this.queryId = null;
+    }
+
+    public java.lang.String getQueryId() {
+        return this.queryId;
+    }
+
+    public void setQueryId(java.lang.String queryId) {
+        this.queryId = queryId;
+    }
+
+    public void unsetQueryId() {
+        this.queryId = null;
+    }
+
+    /** Returns true if field queryId is set (has been assigned a value) and false otherwise */
+    public boolean isSetQueryId() {
+        return this.queryId != null;
+    }
+
+    public void setQueryIdIsSet(boolean value) {
+        if (!value) {
+            this.queryId = null;
+        }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+        switch (field) {
+            case QUERY_ID:
+                if (value == null) {
+                    unsetQueryId();
+                } else {
+                    setQueryId((java.lang.String) value);
+                }
+                break;
+        }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+        switch (field) {
+            case QUERY_ID:
+                return getQueryId();
+        }
+        throw new java.lang.IllegalStateException();
+    }
+
+    /**
+     * Returns true if field corresponding to fieldID is set (has been assigned a value) and false
+     * otherwise
+     */
+    public boolean isSet(_Fields field) {
+        if (field == null) {
+            throw new java.lang.IllegalArgumentException();
+        }
+
+        switch (field) {
+            case QUERY_ID:
+                return isSetQueryId();
+        }
+        throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+        if (that == null) return false;
+        if (that instanceof TGetQueryIdResp) return this.equals((TGetQueryIdResp) that);
+        return false;
+    }
+
+    public boolean equals(TGetQueryIdResp that) {
+        if (that == null) return false;
+        if (this == that) return true;
+
+        boolean this_present_queryId = true && this.isSetQueryId();
+        boolean that_present_queryId = true && that.isSetQueryId();
+        if (this_present_queryId || that_present_queryId) {
+            if (!(this_present_queryId && that_present_queryId)) return false;
+            if (!this.queryId.equals(that.queryId)) return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hashCode = 1;
+
+        hashCode = hashCode * 8191 + ((isSetQueryId()) ? 131071 : 524287);
+        if (isSetQueryId()) hashCode = hashCode * 8191 + queryId.hashCode();
+
+        return hashCode;
+    }
+
+    @Override
+    public int compareTo(TGetQueryIdResp other) {
+        if (!getClass().equals(other.getClass())) {
+            return getClass().getName().compareTo(other.getClass().getName());
+        }
+
+        int lastComparison = 0;
+
+        lastComparison = java.lang.Boolean.valueOf(isSetQueryId()).compareTo(other.isSetQueryId());
+        if (lastComparison != 0) {
+            return lastComparison;
+        }
+        if (isSetQueryId()) {
+            lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.queryId, other.queryId);
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+        }
+        return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+        return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot)
+            throws org.apache.thrift.TException {
+        scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot)
+            throws org.apache.thrift.TException {
+        scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+        java.lang.StringBuilder sb = new java.lang.StringBuilder("TGetQueryIdResp(");
+        boolean first = true;
+
+        sb.append("queryId:");
+        if (this.queryId == null) {
+            sb.append("null");
+        } else {
+            sb.append(this.queryId);
+        }
+        first = false;
+        sb.append(")");
+        return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+        // check for required fields
+        if (!isSetQueryId()) {
+            throw new org.apache.thrift.protocol.TProtocolException(
+                    "Required field 'queryId' is unset! Struct:" + toString());
+        }
+
+        // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+        try {
+            write(
+                    new org.apache.thrift.protocol.TCompactProtocol(
+                            new org.apache.thrift.transport.TIOStreamTransport(out)));
+        } catch (org.apache.thrift.TException te) {
+            throw new java.io.IOException(te);
+        }
+    }
+
+    private void readObject(java.io.ObjectInputStream in)
+            throws java.io.IOException, java.lang.ClassNotFoundException {
+        try {
+            read(
+                    new org.apache.thrift.protocol.TCompactProtocol(
+                            new org.apache.thrift.transport.TIOStreamTransport(in)));
+        } catch (org.apache.thrift.TException te) {
+            throw new java.io.IOException(te);
+        }
+    }
+
+    private static class TGetQueryIdRespStandardSchemeFactory
+            implements org.apache.thrift.scheme.SchemeFactory {
+        public TGetQueryIdRespStandardScheme getScheme() {
+            return new TGetQueryIdRespStandardScheme();
+        }
+    }
+
+    private static class TGetQueryIdRespStandardScheme
+            extends org.apache.thrift.scheme.StandardScheme<TGetQueryIdResp> {
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot, TGetQueryIdResp struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TField schemeField;
+            iprot.readStructBegin();
+            while (true) {
+                schemeField = iprot.readFieldBegin();
+                if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                    break;
+                }
+                switch (schemeField.id) {
+                    case 1: // QUERY_ID
+                        if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                            struct.queryId = iprot.readString();
+                            struct.setQueryIdIsSet(true);
+                        } else {
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                        }
+                        break;
+                    default:
+                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                }
+                iprot.readFieldEnd();
+            }
+            iprot.readStructEnd();
+            struct.validate();
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot, TGetQueryIdResp struct)
+                throws org.apache.thrift.TException {
+            struct.validate();
+
+            oprot.writeStructBegin(STRUCT_DESC);
+            if (struct.queryId != null) {
+                oprot.writeFieldBegin(QUERY_ID_FIELD_DESC);
+                oprot.writeString(struct.queryId);
+                oprot.writeFieldEnd();
+            }
+            oprot.writeFieldStop();
+            oprot.writeStructEnd();
+        }
+    }
+
+    private static class TGetQueryIdRespTupleSchemeFactory
+            implements org.apache.thrift.scheme.SchemeFactory {
+        public TGetQueryIdRespTupleScheme getScheme() {
+            return new TGetQueryIdRespTupleScheme();
+        }
+    }
+
+    private static class TGetQueryIdRespTupleScheme
+            extends org.apache.thrift.scheme.TupleScheme<TGetQueryIdResp> {
+
+        @Override
+        public void write(org.apache.thrift.protocol.TProtocol prot, TGetQueryIdResp struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TTupleProtocol oprot =
+                    (org.apache.thrift.protocol.TTupleProtocol) prot;
+            oprot.writeString(struct.queryId);
+        }
+
+        @Override
+        public void read(org.apache.thrift.protocol.TProtocol prot, TGetQueryIdResp struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TTupleProtocol iprot =
+                    (org.apache.thrift.protocol.TTupleProtocol) prot;
+            struct.queryId = iprot.readString();
+            struct.setQueryIdIsSet(true);
+        }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(
+            org.apache.thrift.protocol.TProtocol proto) {
+        return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme())
+                        ? STANDARD_SCHEME_FACTORY
+                        : TUPLE_SCHEME_FACTORY)
+                .getScheme();
+    }
+}
diff --git a/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TSetClientInfoReq.java b/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TSetClientInfoReq.java
new file mode 100644
index 00000000000..9fab97bd0b1
--- /dev/null
+++ b/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TSetClientInfoReq.java
@@ -0,0 +1,600 @@
+/*
+ * 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.hive.service.rpc.thrift;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)")
+@org.apache.hadoop.hive.common.classification.InterfaceAudience.Public
+@org.apache.hadoop.hive.common.classification.InterfaceStability.Stable
+public class TSetClientInfoReq
+        implements org.apache.thrift.TBase<TSetClientInfoReq, TSetClientInfoReq._Fields>,
+                java.io.Serializable,
+                Cloneable,
+                Comparable<TSetClientInfoReq> {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC =
+            new org.apache.thrift.protocol.TStruct("TSetClientInfoReq");
+
+    private static final org.apache.thrift.protocol.TField SESSION_HANDLE_FIELD_DESC =
+            new org.apache.thrift.protocol.TField(
+                    "sessionHandle", org.apache.thrift.protocol.TType.STRUCT, (short) 1);
+    private static final org.apache.thrift.protocol.TField CONFIGURATION_FIELD_DESC =
+            new org.apache.thrift.protocol.TField(
+                    "configuration", org.apache.thrift.protocol.TType.MAP, (short) 2);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY =
+            new TSetClientInfoReqStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY =
+            new TSetClientInfoReqTupleSchemeFactory();
+
+    private TSessionHandle sessionHandle; // required
+    private java.util.Map<java.lang.String, java.lang.String> configuration; // optional
+
+    /**
+     * The set of fields this struct contains, along with convenience methods for finding and
+     * manipulating them.
+     */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+        SESSION_HANDLE((short) 1, "sessionHandle"),
+        CONFIGURATION((short) 2, "configuration");
+
+        private static final java.util.Map<java.lang.String, _Fields> byName =
+                new java.util.HashMap<java.lang.String, _Fields>();
+
+        static {
+            for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                byName.put(field.getFieldName(), field);
+            }
+        }
+
+        /** Find the _Fields constant that matches fieldId, or null if its not found. */
+        public static _Fields findByThriftId(int fieldId) {
+            switch (fieldId) {
+                case 1: // SESSION_HANDLE
+                    return SESSION_HANDLE;
+                case 2: // CONFIGURATION
+                    return CONFIGURATION;
+                default:
+                    return null;
+            }
+        }
+
+        /**
+         * Find the _Fields constant that matches fieldId, throwing an exception if it is not found.
+         */
+        public static _Fields findByThriftIdOrThrow(int fieldId) {
+            _Fields fields = findByThriftId(fieldId);
+            if (fields == null)
+                throw new java.lang.IllegalArgumentException(
+                        "Field " + fieldId + " doesn't exist!");
+            return fields;
+        }
+
+        /** Find the _Fields constant that matches name, or null if its not found. */
+        public static _Fields findByName(java.lang.String name) {
+            return byName.get(name);
+        }
+
+        private final short _thriftId;
+        private final java.lang.String _fieldName;
+
+        _Fields(short thriftId, java.lang.String fieldName) {
+            _thriftId = thriftId;
+            _fieldName = fieldName;
+        }
+
+        public short getThriftFieldId() {
+            return _thriftId;
+        }
+
+        public java.lang.String getFieldName() {
+            return _fieldName;
+        }
+    }
+
+    // isset id assignments
+    private static final _Fields optionals[] = {_Fields.CONFIGURATION};
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData>
+            metaDataMap;
+
+    static {
+        java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap =
+                new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(
+                        _Fields.class);
+        tmpMap.put(
+                _Fields.SESSION_HANDLE,
+                new org.apache.thrift.meta_data.FieldMetaData(
+                        "sessionHandle",
+                        org.apache.thrift.TFieldRequirementType.REQUIRED,
+                        new org.apache.thrift.meta_data.StructMetaData(
+                                org.apache.thrift.protocol.TType.STRUCT, TSessionHandle.class)));
+        tmpMap.put(
+                _Fields.CONFIGURATION,
+                new org.apache.thrift.meta_data.FieldMetaData(
+                        "configuration",
+                        org.apache.thrift.TFieldRequirementType.OPTIONAL,
+                        new org.apache.thrift.meta_data.MapMetaData(
+                                org.apache.thrift.protocol.TType.MAP,
+                                new org.apache.thrift.meta_data.FieldValueMetaData(
+                                        org.apache.thrift.protocol.TType.STRING),
+                                new org.apache.thrift.meta_data.FieldValueMetaData(
+                                        org.apache.thrift.protocol.TType.STRING))));
+        metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+        org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(
+                TSetClientInfoReq.class, metaDataMap);
+    }
+
+    public TSetClientInfoReq() {}
+
+    public TSetClientInfoReq(TSessionHandle sessionHandle) {
+        this();
+        this.sessionHandle = sessionHandle;
+    }
+
+    /** Performs a deep copy on <i>other</i>. */
+    public TSetClientInfoReq(TSetClientInfoReq other) {
+        if (other.isSetSessionHandle()) {
+            this.sessionHandle = new TSessionHandle(other.sessionHandle);
+        }
+        if (other.isSetConfiguration()) {
+            java.util.Map<java.lang.String, java.lang.String> __this__configuration =
+                    new java.util.HashMap<java.lang.String, java.lang.String>(other.configuration);
+            this.configuration = __this__configuration;
+        }
+    }
+
+    public TSetClientInfoReq deepCopy() {
+        return new TSetClientInfoReq(this);
+    }
+
+    @Override
+    public void clear() {
+        this.sessionHandle = null;
+        this.configuration = null;
+    }
+
+    public TSessionHandle getSessionHandle() {
+        return this.sessionHandle;
+    }
+
+    public void setSessionHandle(TSessionHandle sessionHandle) {
+        this.sessionHandle = sessionHandle;
+    }
+
+    public void unsetSessionHandle() {
+        this.sessionHandle = null;
+    }
+
+    /**
+     * Returns true if field sessionHandle is set (has been assigned a value) and false otherwise
+     */
+    public boolean isSetSessionHandle() {
+        return this.sessionHandle != null;
+    }
+
+    public void setSessionHandleIsSet(boolean value) {
+        if (!value) {
+            this.sessionHandle = null;
+        }
+    }
+
+    public int getConfigurationSize() {
+        return (this.configuration == null) ? 0 : this.configuration.size();
+    }
+
+    public void putToConfiguration(java.lang.String key, java.lang.String val) {
+        if (this.configuration == null) {
+            this.configuration = new java.util.HashMap<java.lang.String, java.lang.String>();
+        }
+        this.configuration.put(key, val);
+    }
+
+    public java.util.Map<java.lang.String, java.lang.String> getConfiguration() {
+        return this.configuration;
+    }
+
+    public void setConfiguration(java.util.Map<java.lang.String, java.lang.String> configuration) {
+        this.configuration = configuration;
+    }
+
+    public void unsetConfiguration() {
+        this.configuration = null;
+    }
+
+    /**
+     * Returns true if field configuration is set (has been assigned a value) and false otherwise
+     */
+    public boolean isSetConfiguration() {
+        return this.configuration != null;
+    }
+
+    public void setConfigurationIsSet(boolean value) {
+        if (!value) {
+            this.configuration = null;
+        }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+        switch (field) {
+            case SESSION_HANDLE:
+                if (value == null) {
+                    unsetSessionHandle();
+                } else {
+                    setSessionHandle((TSessionHandle) value);
+                }
+                break;
+
+            case CONFIGURATION:
+                if (value == null) {
+                    unsetConfiguration();
+                } else {
+                    setConfiguration((java.util.Map<java.lang.String, java.lang.String>) value);
+                }
+                break;
+        }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+        switch (field) {
+            case SESSION_HANDLE:
+                return getSessionHandle();
+
+            case CONFIGURATION:
+                return getConfiguration();
+        }
+        throw new java.lang.IllegalStateException();
+    }
+
+    /**
+     * Returns true if field corresponding to fieldID is set (has been assigned a value) and false
+     * otherwise
+     */
+    public boolean isSet(_Fields field) {
+        if (field == null) {
+            throw new java.lang.IllegalArgumentException();
+        }
+
+        switch (field) {
+            case SESSION_HANDLE:
+                return isSetSessionHandle();
+            case CONFIGURATION:
+                return isSetConfiguration();
+        }
+        throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+        if (that == null) return false;
+        if (that instanceof TSetClientInfoReq) return this.equals((TSetClientInfoReq) that);
+        return false;
+    }
+
+    public boolean equals(TSetClientInfoReq that) {
+        if (that == null) return false;
+        if (this == that) return true;
+
+        boolean this_present_sessionHandle = true && this.isSetSessionHandle();
+        boolean that_present_sessionHandle = true && that.isSetSessionHandle();
+        if (this_present_sessionHandle || that_present_sessionHandle) {
+            if (!(this_present_sessionHandle && that_present_sessionHandle)) return false;
+            if (!this.sessionHandle.equals(that.sessionHandle)) return false;
+        }
+
+        boolean this_present_configuration = true && this.isSetConfiguration();
+        boolean that_present_configuration = true && that.isSetConfiguration();
+        if (this_present_configuration || that_present_configuration) {
+            if (!(this_present_configuration && that_present_configuration)) return false;
+            if (!this.configuration.equals(that.configuration)) return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hashCode = 1;
+
+        hashCode = hashCode * 8191 + ((isSetSessionHandle()) ? 131071 : 524287);
+        if (isSetSessionHandle()) hashCode = hashCode * 8191 + sessionHandle.hashCode();
+
+        hashCode = hashCode * 8191 + ((isSetConfiguration()) ? 131071 : 524287);
+        if (isSetConfiguration()) hashCode = hashCode * 8191 + configuration.hashCode();
+
+        return hashCode;
+    }
+
+    @Override
+    public int compareTo(TSetClientInfoReq other) {
+        if (!getClass().equals(other.getClass())) {
+            return getClass().getName().compareTo(other.getClass().getName());
+        }
+
+        int lastComparison = 0;
+
+        lastComparison =
+                java.lang.Boolean.valueOf(isSetSessionHandle())
+                        .compareTo(other.isSetSessionHandle());
+        if (lastComparison != 0) {
+            return lastComparison;
+        }
+        if (isSetSessionHandle()) {
+            lastComparison =
+                    org.apache.thrift.TBaseHelper.compareTo(
+                            this.sessionHandle, other.sessionHandle);
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+        }
+        lastComparison =
+                java.lang.Boolean.valueOf(isSetConfiguration())
+                        .compareTo(other.isSetConfiguration());
+        if (lastComparison != 0) {
+            return lastComparison;
+        }
+        if (isSetConfiguration()) {
+            lastComparison =
+                    org.apache.thrift.TBaseHelper.compareTo(
+                            this.configuration, other.configuration);
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+        }
+        return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+        return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot)
+            throws org.apache.thrift.TException {
+        scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot)
+            throws org.apache.thrift.TException {
+        scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+        java.lang.StringBuilder sb = new java.lang.StringBuilder("TSetClientInfoReq(");
+        boolean first = true;
+
+        sb.append("sessionHandle:");
+        if (this.sessionHandle == null) {
+            sb.append("null");
+        } else {
+            sb.append(this.sessionHandle);
+        }
+        first = false;
+        if (isSetConfiguration()) {
+            if (!first) sb.append(", ");
+            sb.append("configuration:");
+            if (this.configuration == null) {
+                sb.append("null");
+            } else {
+                sb.append(this.configuration);
+            }
+            first = false;
+        }
+        sb.append(")");
+        return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+        // check for required fields
+        if (!isSetSessionHandle()) {
+            throw new org.apache.thrift.protocol.TProtocolException(
+                    "Required field 'sessionHandle' is unset! Struct:" + toString());
+        }
+
+        // check for sub-struct validity
+        if (sessionHandle != null) {
+            sessionHandle.validate();
+        }
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+        try {
+            write(
+                    new org.apache.thrift.protocol.TCompactProtocol(
+                            new org.apache.thrift.transport.TIOStreamTransport(out)));
+        } catch (org.apache.thrift.TException te) {
+            throw new java.io.IOException(te);
+        }
+    }
+
+    private void readObject(java.io.ObjectInputStream in)
+            throws java.io.IOException, java.lang.ClassNotFoundException {
+        try {
+            read(
+                    new org.apache.thrift.protocol.TCompactProtocol(
+                            new org.apache.thrift.transport.TIOStreamTransport(in)));
+        } catch (org.apache.thrift.TException te) {
+            throw new java.io.IOException(te);
+        }
+    }
+
+    private static class TSetClientInfoReqStandardSchemeFactory
+            implements org.apache.thrift.scheme.SchemeFactory {
+        public TSetClientInfoReqStandardScheme getScheme() {
+            return new TSetClientInfoReqStandardScheme();
+        }
+    }
+
+    private static class TSetClientInfoReqStandardScheme
+            extends org.apache.thrift.scheme.StandardScheme<TSetClientInfoReq> {
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot, TSetClientInfoReq struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TField schemeField;
+            iprot.readStructBegin();
+            while (true) {
+                schemeField = iprot.readFieldBegin();
+                if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                    break;
+                }
+                switch (schemeField.id) {
+                    case 1: // SESSION_HANDLE
+                        if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                            struct.sessionHandle = new TSessionHandle();
+                            struct.sessionHandle.read(iprot);
+                            struct.setSessionHandleIsSet(true);
+                        } else {
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                        }
+                        break;
+                    case 2: // CONFIGURATION
+                        if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+                            {
+                                org.apache.thrift.protocol.TMap _map162 = iprot.readMapBegin();
+                                struct.configuration =
+                                        new java.util.HashMap<java.lang.String, java.lang.String>(
+                                                2 * _map162.size);
+                                java.lang.String _key163;
+                                java.lang.String _val164;
+                                for (int _i165 = 0; _i165 < _map162.size; ++_i165) {
+                                    _key163 = iprot.readString();
+                                    _val164 = iprot.readString();
+                                    struct.configuration.put(_key163, _val164);
+                                }
+                                iprot.readMapEnd();
+                            }
+                            struct.setConfigurationIsSet(true);
+                        } else {
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                        }
+                        break;
+                    default:
+                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                }
+                iprot.readFieldEnd();
+            }
+            iprot.readStructEnd();
+            struct.validate();
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot, TSetClientInfoReq struct)
+                throws org.apache.thrift.TException {
+            struct.validate();
+
+            oprot.writeStructBegin(STRUCT_DESC);
+            if (struct.sessionHandle != null) {
+                oprot.writeFieldBegin(SESSION_HANDLE_FIELD_DESC);
+                struct.sessionHandle.write(oprot);
+                oprot.writeFieldEnd();
+            }
+            if (struct.configuration != null) {
+                if (struct.isSetConfiguration()) {
+                    oprot.writeFieldBegin(CONFIGURATION_FIELD_DESC);
+                    {
+                        oprot.writeMapBegin(
+                                new org.apache.thrift.protocol.TMap(
+                                        org.apache.thrift.protocol.TType.STRING,
+                                        org.apache.thrift.protocol.TType.STRING,
+                                        struct.configuration.size()));
+                        for (java.util.Map.Entry<java.lang.String, java.lang.String> _iter166 :
+                                struct.configuration.entrySet()) {
+                            oprot.writeString(_iter166.getKey());
+                            oprot.writeString(_iter166.getValue());
+                        }
+                        oprot.writeMapEnd();
+                    }
+                    oprot.writeFieldEnd();
+                }
+            }
+            oprot.writeFieldStop();
+            oprot.writeStructEnd();
+        }
+    }
+
+    private static class TSetClientInfoReqTupleSchemeFactory
+            implements org.apache.thrift.scheme.SchemeFactory {
+        public TSetClientInfoReqTupleScheme getScheme() {
+            return new TSetClientInfoReqTupleScheme();
+        }
+    }
+
+    private static class TSetClientInfoReqTupleScheme
+            extends org.apache.thrift.scheme.TupleScheme<TSetClientInfoReq> {
+
+        @Override
+        public void write(org.apache.thrift.protocol.TProtocol prot, TSetClientInfoReq struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TTupleProtocol oprot =
+                    (org.apache.thrift.protocol.TTupleProtocol) prot;
+            struct.sessionHandle.write(oprot);
+            java.util.BitSet optionals = new java.util.BitSet();
+            if (struct.isSetConfiguration()) {
+                optionals.set(0);
+            }
+            oprot.writeBitSet(optionals, 1);
+            if (struct.isSetConfiguration()) {
+                {
+                    oprot.writeI32(struct.configuration.size());
+                    for (java.util.Map.Entry<java.lang.String, java.lang.String> _iter167 :
+                            struct.configuration.entrySet()) {
+                        oprot.writeString(_iter167.getKey());
+                        oprot.writeString(_iter167.getValue());
+                    }
+                }
+            }
+        }
+
+        @Override
+        public void read(org.apache.thrift.protocol.TProtocol prot, TSetClientInfoReq struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TTupleProtocol iprot =
+                    (org.apache.thrift.protocol.TTupleProtocol) prot;
+            struct.sessionHandle = new TSessionHandle();
+            struct.sessionHandle.read(iprot);
+            struct.setSessionHandleIsSet(true);
+            java.util.BitSet incoming = iprot.readBitSet(1);
+            if (incoming.get(0)) {
+                {
+                    org.apache.thrift.protocol.TMap _map168 =
+                            new org.apache.thrift.protocol.TMap(
+                                    org.apache.thrift.protocol.TType.STRING,
+                                    org.apache.thrift.protocol.TType.STRING,
+                                    iprot.readI32());
+                    struct.configuration =
+                            new java.util.HashMap<java.lang.String, java.lang.String>(
+                                    2 * _map168.size);
+                    java.lang.String _key169;
+                    java.lang.String _val170;
+                    for (int _i171 = 0; _i171 < _map168.size; ++_i171) {
+                        _key169 = iprot.readString();
+                        _val170 = iprot.readString();
+                        struct.configuration.put(_key169, _val170);
+                    }
+                }
+                struct.setConfigurationIsSet(true);
+            }
+        }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(
+            org.apache.thrift.protocol.TProtocol proto) {
+        return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme())
+                        ? STANDARD_SCHEME_FACTORY
+                        : TUPLE_SCHEME_FACTORY)
+                .getScheme();
+    }
+}
diff --git a/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TSetClientInfoResp.java b/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TSetClientInfoResp.java
new file mode 100644
index 00000000000..19c9c66a812
--- /dev/null
+++ b/flink-connectors/flink-connector-hive/src/main/java/org/apache/hive/service/rpc/thrift/TSetClientInfoResp.java
@@ -0,0 +1,410 @@
+/*
+ * 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.hive.service.rpc.thrift;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)")
+@org.apache.hadoop.hive.common.classification.InterfaceAudience.Public
+@org.apache.hadoop.hive.common.classification.InterfaceStability.Stable
+public class TSetClientInfoResp
+        implements org.apache.thrift.TBase<TSetClientInfoResp, TSetClientInfoResp._Fields>,
+                java.io.Serializable,
+                Cloneable,
+                Comparable<TSetClientInfoResp> {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC =
+            new org.apache.thrift.protocol.TStruct("TSetClientInfoResp");
+
+    private static final org.apache.thrift.protocol.TField STATUS_FIELD_DESC =
+            new org.apache.thrift.protocol.TField(
+                    "status", org.apache.thrift.protocol.TType.STRUCT, (short) 1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY =
+            new TSetClientInfoRespStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY =
+            new TSetClientInfoRespTupleSchemeFactory();
+
+    private TStatus status; // required
+
+    /**
+     * The set of fields this struct contains, along with convenience methods for finding and
+     * manipulating them.
+     */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+        STATUS((short) 1, "status");
+
+        private static final java.util.Map<java.lang.String, _Fields> byName =
+                new java.util.HashMap<java.lang.String, _Fields>();
+
+        static {
+            for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+                byName.put(field.getFieldName(), field);
+            }
+        }
+
+        /** Find the _Fields constant that matches fieldId, or null if its not found. */
+        public static _Fields findByThriftId(int fieldId) {
+            switch (fieldId) {
+                case 1: // STATUS
+                    return STATUS;
+                default:
+                    return null;
+            }
+        }
+
+        /**
+         * Find the _Fields constant that matches fieldId, throwing an exception if it is not found.
+         */
+        public static _Fields findByThriftIdOrThrow(int fieldId) {
+            _Fields fields = findByThriftId(fieldId);
+            if (fields == null)
+                throw new java.lang.IllegalArgumentException(
+                        "Field " + fieldId + " doesn't exist!");
+            return fields;
+        }
+
+        /** Find the _Fields constant that matches name, or null if its not found. */
+        public static _Fields findByName(java.lang.String name) {
+            return byName.get(name);
+        }
+
+        private final short _thriftId;
+        private final java.lang.String _fieldName;
+
+        _Fields(short thriftId, java.lang.String fieldName) {
+            _thriftId = thriftId;
+            _fieldName = fieldName;
+        }
+
+        public short getThriftFieldId() {
+            return _thriftId;
+        }
+
+        public java.lang.String getFieldName() {
+            return _fieldName;
+        }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData>
+            metaDataMap;
+
+    static {
+        java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap =
+                new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(
+                        _Fields.class);
+        tmpMap.put(
+                _Fields.STATUS,
+                new org.apache.thrift.meta_data.FieldMetaData(
+                        "status",
+                        org.apache.thrift.TFieldRequirementType.REQUIRED,
+                        new org.apache.thrift.meta_data.StructMetaData(
+                                org.apache.thrift.protocol.TType.STRUCT, TStatus.class)));
+        metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+        org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(
+                TSetClientInfoResp.class, metaDataMap);
+    }
+
+    public TSetClientInfoResp() {}
+
+    public TSetClientInfoResp(TStatus status) {
+        this();
+        this.status = status;
+    }
+
+    /** Performs a deep copy on <i>other</i>. */
+    public TSetClientInfoResp(TSetClientInfoResp other) {
+        if (other.isSetStatus()) {
+            this.status = new TStatus(other.status);
+        }
+    }
+
+    public TSetClientInfoResp deepCopy() {
+        return new TSetClientInfoResp(this);
+    }
+
+    @Override
+    public void clear() {
+        this.status = null;
+    }
+
+    public TStatus getStatus() {
+        return this.status;
+    }
+
+    public void setStatus(TStatus status) {
+        this.status = status;
+    }
+
+    public void unsetStatus() {
+        this.status = null;
+    }
+
+    /** Returns true if field status is set (has been assigned a value) and false otherwise */
+    public boolean isSetStatus() {
+        return this.status != null;
+    }
+
+    public void setStatusIsSet(boolean value) {
+        if (!value) {
+            this.status = null;
+        }
+    }
+
+    public void setFieldValue(_Fields field, java.lang.Object value) {
+        switch (field) {
+            case STATUS:
+                if (value == null) {
+                    unsetStatus();
+                } else {
+                    setStatus((TStatus) value);
+                }
+                break;
+        }
+    }
+
+    public java.lang.Object getFieldValue(_Fields field) {
+        switch (field) {
+            case STATUS:
+                return getStatus();
+        }
+        throw new java.lang.IllegalStateException();
+    }
+
+    /**
+     * Returns true if field corresponding to fieldID is set (has been assigned a value) and false
+     * otherwise
+     */
+    public boolean isSet(_Fields field) {
+        if (field == null) {
+            throw new java.lang.IllegalArgumentException();
+        }
+
+        switch (field) {
+            case STATUS:
+                return isSetStatus();
+        }
+        throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+        if (that == null) return false;
+        if (that instanceof TSetClientInfoResp) return this.equals((TSetClientInfoResp) that);
+        return false;
+    }
+
+    public boolean equals(TSetClientInfoResp that) {
+        if (that == null) return false;
+        if (this == that) return true;
+
+        boolean this_present_status = true && this.isSetStatus();
+        boolean that_present_status = true && that.isSetStatus();
+        if (this_present_status || that_present_status) {
+            if (!(this_present_status && that_present_status)) return false;
+            if (!this.status.equals(that.status)) return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hashCode = 1;
+
+        hashCode = hashCode * 8191 + ((isSetStatus()) ? 131071 : 524287);
+        if (isSetStatus()) hashCode = hashCode * 8191 + status.hashCode();
+
+        return hashCode;
+    }
+
+    @Override
+    public int compareTo(TSetClientInfoResp other) {
+        if (!getClass().equals(other.getClass())) {
+            return getClass().getName().compareTo(other.getClass().getName());
+        }
+
+        int lastComparison = 0;
+
+        lastComparison = java.lang.Boolean.valueOf(isSetStatus()).compareTo(other.isSetStatus());
+        if (lastComparison != 0) {
+            return lastComparison;
+        }
+        if (isSetStatus()) {
+            lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.status, other.status);
+            if (lastComparison != 0) {
+                return lastComparison;
+            }
+        }
+        return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+        return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot)
+            throws org.apache.thrift.TException {
+        scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot)
+            throws org.apache.thrift.TException {
+        scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+        java.lang.StringBuilder sb = new java.lang.StringBuilder("TSetClientInfoResp(");
+        boolean first = true;
+
+        sb.append("status:");
+        if (this.status == null) {
+            sb.append("null");
+        } else {
+            sb.append(this.status);
+        }
+        first = false;
+        sb.append(")");
+        return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+        // check for required fields
+        if (!isSetStatus()) {
+            throw new org.apache.thrift.protocol.TProtocolException(
+                    "Required field 'status' is unset! Struct:" + toString());
+        }
+
+        // check for sub-struct validity
+        if (status != null) {
+            status.validate();
+        }
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+        try {
+            write(
+                    new org.apache.thrift.protocol.TCompactProtocol(
+                            new org.apache.thrift.transport.TIOStreamTransport(out)));
+        } catch (org.apache.thrift.TException te) {
+            throw new java.io.IOException(te);
+        }
+    }
+
+    private void readObject(java.io.ObjectInputStream in)
+            throws java.io.IOException, java.lang.ClassNotFoundException {
+        try {
+            read(
+                    new org.apache.thrift.protocol.TCompactProtocol(
+                            new org.apache.thrift.transport.TIOStreamTransport(in)));
+        } catch (org.apache.thrift.TException te) {
+            throw new java.io.IOException(te);
+        }
+    }
+
+    private static class TSetClientInfoRespStandardSchemeFactory
+            implements org.apache.thrift.scheme.SchemeFactory {
+        public TSetClientInfoRespStandardScheme getScheme() {
+            return new TSetClientInfoRespStandardScheme();
+        }
+    }
+
+    private static class TSetClientInfoRespStandardScheme
+            extends org.apache.thrift.scheme.StandardScheme<TSetClientInfoResp> {
+
+        public void read(org.apache.thrift.protocol.TProtocol iprot, TSetClientInfoResp struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TField schemeField;
+            iprot.readStructBegin();
+            while (true) {
+                schemeField = iprot.readFieldBegin();
+                if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+                    break;
+                }
+                switch (schemeField.id) {
+                    case 1: // STATUS
+                        if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                            struct.status = new TStatus();
+                            struct.status.read(iprot);
+                            struct.setStatusIsSet(true);
+                        } else {
+                            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                        }
+                        break;
+                    default:
+                        org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+                }
+                iprot.readFieldEnd();
+            }
+            iprot.readStructEnd();
+            struct.validate();
+        }
+
+        public void write(org.apache.thrift.protocol.TProtocol oprot, TSetClientInfoResp struct)
+                throws org.apache.thrift.TException {
+            struct.validate();
+
+            oprot.writeStructBegin(STRUCT_DESC);
+            if (struct.status != null) {
+                oprot.writeFieldBegin(STATUS_FIELD_DESC);
+                struct.status.write(oprot);
+                oprot.writeFieldEnd();
+            }
+            oprot.writeFieldStop();
+            oprot.writeStructEnd();
+        }
+    }
+
+    private static class TSetClientInfoRespTupleSchemeFactory
+            implements org.apache.thrift.scheme.SchemeFactory {
+        public TSetClientInfoRespTupleScheme getScheme() {
+            return new TSetClientInfoRespTupleScheme();
+        }
+    }
+
+    private static class TSetClientInfoRespTupleScheme
+            extends org.apache.thrift.scheme.TupleScheme<TSetClientInfoResp> {
+
+        @Override
+        public void write(org.apache.thrift.protocol.TProtocol prot, TSetClientInfoResp struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TTupleProtocol oprot =
+                    (org.apache.thrift.protocol.TTupleProtocol) prot;
+            struct.status.write(oprot);
+        }
+
+        @Override
+        public void read(org.apache.thrift.protocol.TProtocol prot, TSetClientInfoResp struct)
+                throws org.apache.thrift.TException {
+            org.apache.thrift.protocol.TTupleProtocol iprot =
+                    (org.apache.thrift.protocol.TTupleProtocol) prot;
+            struct.status = new TStatus();
+            struct.status.read(iprot);
+            struct.setStatusIsSet(true);
+        }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(
+            org.apache.thrift.protocol.TProtocol proto) {
+        return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme())
+                        ? STANDARD_SCHEME_FACTORY
+                        : TUPLE_SCHEME_FACTORY)
+                .getScheme();
+    }
+}
diff --git a/flink-connectors/flink-connector-hive/src/test/java/org/apache/flink/table/endpoint/hive/util/HiveServer2EndpointExtension.java b/flink-connectors/flink-connector-hive/src/test/java/org/apache/flink/table/endpoint/hive/util/HiveServer2EndpointExtension.java
index afccb6cf798..5d26965cc92 100644
--- a/flink-connectors/flink-connector-hive/src/test/java/org/apache/flink/table/endpoint/hive/util/HiveServer2EndpointExtension.java
+++ b/flink-connectors/flink-connector-hive/src/test/java/org/apache/flink/table/endpoint/hive/util/HiveServer2EndpointExtension.java
@@ -102,9 +102,13 @@ public class HiveServer2EndpointExtension implements BeforeAllCallback, AfterAll
     }
 
     public Connection getConnection() throws Exception {
+        // In hive3, if "hive.metastore.schema.verification" is true, the
+        // "datanucleus.schema.autoCreateTables" is false during the creation of the HiveConf.
+        // So we need to manually enable datanucleus.schema.autoCreateAll
+        // Please cc FLINK-27999 for more details
         return DriverManager.getConnection(
                 String.format(
-                        "jdbc:hive2://%s:%s/default;auth=noSasl",
+                        "jdbc:hive2://%s:%s/default;auth=noSasl?datanucleus.schema.autoCreateAll=true",
                         InetAddress.getLocalHost().getHostAddress(), getPort()));
     }
 }
diff --git a/tools/maven/suppressions.xml b/tools/maven/suppressions.xml
index fde4067b86a..7f92e6f6c88 100644
--- a/tools/maven/suppressions.xml
+++ b/tools/maven/suppressions.xml
@@ -89,4 +89,5 @@ under the License.
 			checks=".*"/>
 		<!-- suppress check for copied hive code -->
 		<suppress files="org[\\/]apache[\\/]hadoop[\\/]hive[\\/].*.java" checks=".*"/>
+		<suppress files="org[\\/]apache[\\/]hive[\\/]service[\\/]rpc[\\/]thrift[\\/].*.java" checks=".*"/>
 </suppressions>