From 4f67413c9810bd6de3b82feb40bff2cc8a4ca467 Mon Sep 17 00:00:00 2001 From: Alex Ting Date: Mon, 22 Jan 2024 14:27:11 +0800 Subject: [PATCH] [improve][connector-tdengine] support read bool column from tdengine (#6025) --------- Co-authored-by: DESKTOP-GHPCOV0\dingaolong --- .../typemapper/TDengineTypeMapper.java | 6 +-- .../typemapper/TDengineTypeMapperTest.java | 36 ++++++++++++++++++ .../e2e/connector/tdengine/TDengineIT.java | 38 ++++++++++--------- 3 files changed, 59 insertions(+), 21 deletions(-) create mode 100644 seatunnel-connectors-v2/connector-tdengine/src/test/java/org/apache/seatunnel/connectors/seatunnel/tdengine/typemapper/TDengineTypeMapperTest.java diff --git a/seatunnel-connectors-v2/connector-tdengine/src/main/java/org/apache/seatunnel/connectors/seatunnel/tdengine/typemapper/TDengineTypeMapper.java b/seatunnel-connectors-v2/connector-tdengine/src/main/java/org/apache/seatunnel/connectors/seatunnel/tdengine/typemapper/TDengineTypeMapper.java index 16b9c58a3adf..5099c4f3544c 100644 --- a/seatunnel-connectors-v2/connector-tdengine/src/main/java/org/apache/seatunnel/connectors/seatunnel/tdengine/typemapper/TDengineTypeMapper.java +++ b/seatunnel-connectors-v2/connector-tdengine/src/main/java/org/apache/seatunnel/connectors/seatunnel/tdengine/typemapper/TDengineTypeMapper.java @@ -34,6 +34,7 @@ public class TDengineTypeMapper { private static final String TDENGINE_UNKNOWN = "UNKNOWN"; private static final String TDENGINE_BIT = "BIT"; + private static final String TDENGINE_BOOL = "BOOL"; // -------------------------number---------------------------- private static final String TDENGINE_TINYINT = "TINYINT"; @@ -82,6 +83,7 @@ public class TDengineTypeMapper { public static SeaTunnelDataType mapping(String tdengineType) { switch (tdengineType) { + case TDENGINE_BOOL: case TDENGINE_BIT: return BasicType.BOOLEAN_TYPE; case TDENGINE_TINYINT: @@ -145,9 +147,7 @@ public static SeaTunnelDataType mapping(String tdengineType) { default: throw new TDengineConnectorException( CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE, - String.format( - "Doesn't support TDENGINE type '%s' on column '%s' yet.", - tdengineType)); + String.format("Doesn't support TDENGINE type '%s' yet.", tdengineType)); } } } diff --git a/seatunnel-connectors-v2/connector-tdengine/src/test/java/org/apache/seatunnel/connectors/seatunnel/tdengine/typemapper/TDengineTypeMapperTest.java b/seatunnel-connectors-v2/connector-tdengine/src/test/java/org/apache/seatunnel/connectors/seatunnel/tdengine/typemapper/TDengineTypeMapperTest.java new file mode 100644 index 000000000000..8ee65dbc877c --- /dev/null +++ b/seatunnel-connectors-v2/connector-tdengine/src/test/java/org/apache/seatunnel/connectors/seatunnel/tdengine/typemapper/TDengineTypeMapperTest.java @@ -0,0 +1,36 @@ +/* + * 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.seatunnel.connectors.seatunnel.tdengine.typemapper; + +import org.apache.seatunnel.api.table.type.BasicType; +import org.apache.seatunnel.api.table.type.SeaTunnelDataType; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class TDengineTypeMapperTest { + + @Test + void mapping() { + SeaTunnelDataType type = TDengineTypeMapper.mapping("BOOL"); + Assertions.assertEquals(BasicType.BOOLEAN_TYPE, type); + + type = TDengineTypeMapper.mapping("CHAR"); + Assertions.assertEquals(BasicType.STRING_TYPE, type); + } +} diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-tdengine-e2e/src/test/java/org/apache/seatunnel/e2e/connector/tdengine/TDengineIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-tdengine-e2e/src/test/java/org/apache/seatunnel/e2e/connector/tdengine/TDengineIT.java index ca31343ce62f..10724ac2c6f2 100644 --- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-tdengine-e2e/src/test/java/org/apache/seatunnel/e2e/connector/tdengine/TDengineIT.java +++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-tdengine-e2e/src/test/java/org/apache/seatunnel/e2e/connector/tdengine/TDengineIT.java @@ -109,7 +109,7 @@ private int generateTestDataSet() { try (Statement stmt = connection1.createStatement()) { stmt.execute("CREATE DATABASE power KEEP 3650"); stmt.execute( - "CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) " + "CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT, off BOOL) " + "TAGS (location BINARY(64), groupId INT)"); String sql = getSQL(); rowCount = stmt.executeUpdate(sql); @@ -117,7 +117,7 @@ private int generateTestDataSet() { try (Statement stmt = connection2.createStatement()) { stmt.execute("CREATE DATABASE power2 KEEP 3650"); stmt.execute( - "CREATE STABLE power2.meters2 (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) " + "CREATE STABLE power2.meters2 (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT, off BOOL) " + "TAGS (location BINARY(64), groupId INT)"); } return rowCount; @@ -176,18 +176,18 @@ public void tearDown() throws Exception { /** * The generated SQL is: INSERT INTO power.d1001 USING power.meters - * TAGS(California.SanFrancisco, 2) VALUES('2018-10-03 14:38:05.000',10.30000,219,0.31000) + * TAGS(California.SanFrancisco, 2) VALUES('2018-10-03 14:38:05.000',10.30000,219,0.31000, true) * power.d1001 USING power.meters TAGS(California.SanFrancisco, 2) VALUES('2018-10-03 - * 14:38:15.000',12.60000,218,0.33000) power.d1001 USING power.meters - * TAGS(California.SanFrancisco, 2) VALUES('2018-10-03 14:38:16.800',12.30000,221,0.31000) + * 14:38:15.000',12.60000,218,0.33000, false) power.d1001 USING power.meters + * TAGS(California.SanFrancisco, 2) VALUES('2018-10-03 14:38:16.800',12.30000,221,0.31000, true) * power.d1002 USING power.meters TAGS(California.SanFrancisco, 3) VALUES('2018-10-03 - * 14:38:16.650',10.30000,218,0.25000) power.d1003 USING power.meters - * TAGS(California.LosAngeles, 2) VALUES('2018-10-03 14:38:05.500',11.80000,221,0.28000) + * 14:38:16.650',10.30000,218,0.25000, true) power.d1003 USING power.meters + * TAGS(California.LosAngeles, 2) VALUES('2018-10-03 14:38:05.500',11.80000,221,0.28000, true) * power.d1003 USING power.meters TAGS(California.LosAngeles, 2) VALUES('2018-10-03 - * 14:38:16.600',13.40000,223,0.29000) power.d1004 USING power.meters - * TAGS(California.LosAngeles, 3) VALUES('2018-10-03 14:38:05.000',10.80000,223,0.29000) + * 14:38:16.600',13.40000,223,0.29000, true) power.d1004 USING power.meters + * TAGS(California.LosAngeles, 3) VALUES('2018-10-03 14:38:05.000',10.80000,223,0.29000, true) * power.d1004 USING power.meters TAGS(California.LosAngeles, 3) VALUES('2018-10-03 - * 14:38:06.500',11.50000,221,0.35000) + * 14:38:06.500',11.50000,221,0.35000, false) */ private static String getSQL() { StringBuilder sb = new StringBuilder("INSERT INTO "); @@ -208,6 +208,8 @@ private static String getSQL() { .append(ps[3]) .append(",") // voltage .append(ps[4]) + .append(",") // off + .append(ps[7]) .append(") "); // phase } return sb.toString(); @@ -215,13 +217,13 @@ private static String getSQL() { private static List getRawData() { return Arrays.asList( - "d1001,2018-10-03 14:38:05.000,10.30000,219,0.31000,'California.SanFrancisco',2", - "d1001,2018-10-03 14:38:15.000,12.60000,218,0.33000,'California.SanFrancisco',2", - "d1001,2018-10-03 14:38:16.800,12.30000,221,0.31000,'California.SanFrancisco',2", - "d1002,2018-10-03 14:38:16.650,10.30000,218,0.25000,'California.SanFrancisco',3", - "d1003,2018-10-03 14:38:05.500,11.80000,221,0.28000,'California.LosAngeles',2", - "d1003,2018-10-03 14:38:16.600,13.40000,223,0.29000,'California.LosAngeles',2", - "d1004,2018-10-03 14:38:05.000,10.80000,223,0.29000,'California.LosAngeles',3", - "d1004,2018-10-03 14:38:06.500,11.50000,221,0.35000,'California.LosAngeles',3"); + "d1001,2018-10-03 14:38:05.000,10.30000,219,0.31000,'California.SanFrancisco',2,true", + "d1001,2018-10-03 14:38:15.000,12.60000,218,0.33000,'California.SanFrancisco',2,false", + "d1001,2018-10-03 14:38:16.800,12.30000,221,0.31000,'California.SanFrancisco',2,true", + "d1002,2018-10-03 14:38:16.650,10.30000,218,0.25000,'California.SanFrancisco',3,true", + "d1003,2018-10-03 14:38:05.500,11.80000,221,0.28000,'California.LosAngeles',2,true", + "d1003,2018-10-03 14:38:16.600,13.40000,223,0.29000,'California.LosAngeles',2,true", + "d1004,2018-10-03 14:38:05.000,10.80000,223,0.29000,'California.LosAngeles',3,true", + "d1004,2018-10-03 14:38:06.500,11.50000,221,0.35000,'California.LosAngeles',3,false"); } }