You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@seatunnel.apache.org by "HaoXuAI (via GitHub)" <gi...@apache.org> on 2023/05/01 04:20:16 UTC

[GitHub] [incubator-seatunnel] HaoXuAI commented on a diff in pull request #4470: [Feature][Connector-v2] Add Snowflake Source&Sink connector

HaoXuAI commented on code in PR #4470:
URL: https://github.com/apache/incubator-seatunnel/pull/4470#discussion_r1181381675


##########
seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/snowflake/SnowflakeTypeMapper.java:
##########
@@ -0,0 +1,133 @@
+/*
+ * 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.jdbc.internal.dialect.snowflake;
+
+import org.apache.seatunnel.api.table.type.BasicType;
+import org.apache.seatunnel.api.table.type.DecimalType;
+import org.apache.seatunnel.api.table.type.LocalTimeType;
+import org.apache.seatunnel.api.table.type.PrimitiveByteArrayType;
+import org.apache.seatunnel.api.table.type.SeaTunnelDataType;
+import org.apache.seatunnel.connectors.seatunnel.jdbc.internal.dialect.JdbcDialectTypeMapper;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+
+@Slf4j
+public class SnowflakeTypeMapper implements JdbcDialectTypeMapper {
+
+    /* ============================ data types ===================== */
+    private static final String SNOWFLAKE_NUMBER = "NUMBER";
+    private static final String SNOWFLAKE_DECIMAL = "DECIMAL";
+    private static final String SNOWFLAKE_NUMERIC = "NUMERIC";
+    private static final String SNOWFLAKE_INT = "INT";
+    private static final String SNOWFLAKE_INTEGER = "INTEGER";
+    private static final String SNOWFLAKE_BIGINT = "BIGINT";
+    private static final String SNOWFLAKE_SMALLINT = "SMALLINT";
+    private static final String SNOWFLAKE_TINYINT = "TINYINT";
+    private static final String SNOWFLAKE_BYTEINT = "BYTEINT";
+
+    private static final String SNOWFLAKE_FLOAT = "FLOAT";
+    private static final String SNOWFLAKE_FLOAT4 = "FLOAT4";
+    private static final String SNOWFLAKE_FLOAT8 = "FLOAT8";
+    private static final String SNOWFLAKE_DOUBLE = "DOUBLE";
+    private static final String SNOWFLAKE_DOUBLE_PRECISION = "DOUBLE PRECISION";
+    private static final String SNOWFLAKE_REAL = "REAL";
+
+    private static final String SNOWFLAKE_VARCHAR = "VARCHAR";
+    private static final String SNOWFLAKE_CHAR = "CHAR";
+    private static final String SNOWFLAKE_CHARACTER = "CHARACTER";
+    private static final String SNOWFLAKE_STRING = "STRING";
+    private static final String SNOWFLAKE_TEXT = "TEXT";
+    private static final String SNOWFLAKE_BINARY = "BINARY";
+    private static final String SNOWFLAKE_VARBINARY = "VARBINARY";
+
+    private static final String SNOWFLAKE_BOOLEAN = "BOOLEAN";
+
+    private static final String SNOWFLAKE_DATE = "DATE";
+    private static final String SNOWFLAKE_DATE_TIME = "DATE_TIME";
+    private static final String SNOWFLAKE_TIME = "TIME";
+    private static final String SNOWFLAKE_TIMESTAMP = "TIMESTAMP";
+    private static final String SNOWFLAKE_TIMESTAMP_LTZ = "TIMESTAMP_LTZ";
+    private static final String SNOWFLAKE_TIMESTAMP_NTZ = "TIMESTAMP_NTZ";
+    private static final String SNOWFLAKE_TIMESTAMP_TZ = "TIMESTAMP_TZ";
+
+    private static final String SNOWFLAKE_GEOGRAPHY = "GEOGRAPHY";
+    private static final String SNOWFLAKE_GEOMETRY = "GEOMETRY";
+
+    @Override
+    public SeaTunnelDataType<?> mapping(ResultSetMetaData metadata, int colIndex)
+            throws SQLException {
+        String snowflakeType = metadata.getColumnTypeName(colIndex).toUpperCase();
+        int precision = metadata.getPrecision(colIndex);
+        int scale = metadata.getScale(colIndex);
+        switch (snowflakeType) {
+            case SNOWFLAKE_SMALLINT:
+            case SNOWFLAKE_TINYINT:
+            case SNOWFLAKE_BYTEINT:
+                return BasicType.SHORT_TYPE;
+            case SNOWFLAKE_INTEGER:
+            case SNOWFLAKE_INT:
+                return BasicType.INT_TYPE;
+            case SNOWFLAKE_BIGINT:
+                return BasicType.LONG_TYPE;
+            case SNOWFLAKE_DECIMAL:
+            case SNOWFLAKE_NUMERIC:
+            case SNOWFLAKE_NUMBER:
+                return new DecimalType(precision, scale);
+            case SNOWFLAKE_REAL:
+            case SNOWFLAKE_FLOAT4:
+                return BasicType.FLOAT_TYPE;
+            case SNOWFLAKE_DOUBLE:
+            case SNOWFLAKE_DOUBLE_PRECISION:
+            case SNOWFLAKE_FLOAT8:
+            case SNOWFLAKE_FLOAT:
+                return BasicType.DOUBLE_TYPE;
+            case SNOWFLAKE_BOOLEAN:
+                return BasicType.BOOLEAN_TYPE;
+            case SNOWFLAKE_CHAR:
+            case SNOWFLAKE_CHARACTER:
+            case SNOWFLAKE_VARCHAR:
+            case SNOWFLAKE_STRING:
+            case SNOWFLAKE_TEXT:
+            case SNOWFLAKE_BINARY:
+            case SNOWFLAKE_VARBINARY:
+                return BasicType.STRING_TYPE;
+            case SNOWFLAKE_DATE:
+                return LocalTimeType.LOCAL_DATE_TYPE;
+            case SNOWFLAKE_GEOGRAPHY:
+            case SNOWFLAKE_GEOMETRY:
+                return PrimitiveByteArrayType.INSTANCE;
+            case SNOWFLAKE_TIME:
+                return LocalTimeType.LOCAL_TIME_TYPE;
+            case SNOWFLAKE_DATE_TIME:
+            case SNOWFLAKE_TIMESTAMP:
+            case SNOWFLAKE_TIMESTAMP_LTZ:
+            case SNOWFLAKE_TIMESTAMP_NTZ:
+            case SNOWFLAKE_TIMESTAMP_TZ:
+                return LocalTimeType.LOCAL_DATE_TIME_TYPE;
+            default:
+                final String jdbcColumnName = metadata.getColumnName(colIndex);

Review Comment:
   what is the "Json string" type in ST?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@seatunnel.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org