Skip to content

Commit d5c7126

Browse files
committed
feat: unit test and doc for snowflake dialect
1 parent 7a3b94a commit d5c7126

File tree

2 files changed

+103
-3
lines changed

2 files changed

+103
-3
lines changed

docs/content/docs/connectors/table/jdbc.md

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ A driver dependency is also required to connect to a specified database. Here ar
5555
| CrateDB | `io.crate` | `crate-jdbc` | [Download](https://repo1.maven.org/maven2/io/crate/crate-jdbc/) |
5656
| Db2 | `com.ibm.db2.jcc` | `db2jcc` | [Download](https://www.ibm.com/support/pages/download-db2-fix-packs-version-db2-linux-unix-and-windows) |
5757
| Trino | `io.trino` | `trino-jdbc` | [Download](https://repo1.maven.org/maven2/io/trino/trino-jdbc/) |
58-
| OceanBase | `com.oceanbase` | `oceanbase-client` | [Download](https://repo1.maven.org/maven2/com/oceanbase/oceanbase-client/) |
59-
58+
| OceanBase | `com.oceanbase` | `oceanbase-client` | [Download](https://repo1.maven.org/maven2/net/snowflake/snowflake-jdbc/)
6059

6160
JDBC connector and drivers are not part of Flink's binary distribution. See how to link with them for cluster execution [here]({{< ref "docs/dev/configuration/overview" >}}).
6261

@@ -433,6 +432,13 @@ As there is no standard syntax for upsert, the following table describes the dat
433432
WHEN NOT MATCHED THEN INSERT (..) <br>
434433
VALUES (..)</td>
435434
</tr>
435+
<tr>
436+
<td>Snowflake</td>
437+
<td>MERGE INTO .. USING (..) ON (..) <br>
438+
WHEN MATCHED THEN UPDATE SET (..) <br>
439+
WHEN NOT MATCHED THEN INSERT (..) <br>
440+
VALUES (..)</td>
441+
</tr>
436442
</tbody>
437443
</table>
438444

@@ -670,6 +676,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
670676
<th class="text-left"><a href="https://trino.io/docs/current/language/types.html">Trino type</a></th>
671677
<th class="text-left"><a href="https://en.oceanbase.com/docs/common-oceanbase-database-10000000001106898">OceanBase MySQL mode type</a></th>
672678
<th class="text-left"><a href="https://en.oceanbase.com/docs/common-oceanbase-database-10000000001107076">OceanBase Oracle mode type</a></th>
679+
<th class="text-left"><a href="https://docs.snowflake.com/en/sql-reference-data-types">Snowflake</a></th>
673680
<th class="text-left"><a href="{{< ref "docs/dev/table/types" >}}">Flink SQL type</a></th>
674681
</tr>
675682
</thead>
@@ -684,6 +691,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
684691
<td><code>TINYINT</code></td>
685692
<td><code>TINYINT</code></td>
686693
<td></td>
694+
<td></td>
687695
<td><code>TINYINT</code></td>
688696
</tr>
689697
<tr>
@@ -706,6 +714,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
706714
<code>SMALLINT</code><br>
707715
<code>TINYINT UNSIGNED</code></td>
708716
<td></td>
717+
<td>SMALLINT</td>
709718
<td><code>SMALLINT</code></td>
710719
</tr>
711720
<tr>
@@ -728,6 +737,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
728737
<code>MEDIUMINT</code><br>
729738
<code>SMALLINT UNSIGNED</code></td>
730739
<td></td>
740+
<td>INT</td>
731741
<td><code>INT</code></td>
732742
</tr>
733743
<tr>
@@ -748,6 +758,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
748758
<code>BIGINT</code><br>
749759
<code>INT UNSIGNED</code></td>
750760
<td></td>
761+
<td>BIGINT</td>
751762
<td><code>BIGINT</code></td>
752763
</tr>
753764
<tr>
@@ -760,6 +771,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
760771
<td></td>
761772
<td><code>BIGINT UNSIGNED</code></td>
762773
<td></td>
774+
<td></td>
763775
<td><code>DECIMAL(20, 0)</code></td>
764776
</tr>
765777
<tr>
@@ -778,6 +790,9 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
778790
<td><code>FLOAT</code></td>
779791
<td>
780792
<code>BINARY_FLOAT</code></td>
793+
<td>
794+
<code>REAL</code><br>
795+
<code>FLOAT</code></td>
781796
<td><code>FLOAT</code></td>
782797
</tr>
783798
<tr>
@@ -796,6 +811,9 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
796811
<td><code>DOUBLE</code></td>
797812
<td><code>DOUBLE</code></td>
798813
<td><code>BINARY_DOUBLE</code></td>
814+
<td>
815+
<code>DOUBLE</code><br>
816+
<code>DOUBLE PRECISION</code></td>
799817
<td><code>DOUBLE</code></td>
800818
</tr>
801819
<tr>
@@ -824,6 +842,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
824842
<td>
825843
<code>FLOAT(s)</code><br>
826844
<code>NUMBER(p, s)</code></td>
845+
<td><code>NUMERIC(p, s)</code></td>
827846
<td><code>DECIMAL(p, s)</code></td>
828847
</tr>
829848
<tr>
@@ -841,6 +860,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
841860
<code>TINYINT(1)</code></td>
842861
<td></td>
843862
<td><code>BOOLEAN</code></td>
863+
<td><code>BOOLEAN</code></td>
844864
</tr>
845865
<tr>
846866
<td><code>DATE</code></td>
@@ -853,6 +873,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
853873
<td><code>DATE</code></td>
854874
<td><code>DATE</code></td>
855875
<td><code>DATE</code></td>
876+
<td><code>DATE</code></td>
856877
</tr>
857878
<tr>
858879
<td><code>TIME [(p)]</code></td>
@@ -864,6 +885,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
864885
<td><code>TIME_WITHOUT_TIME_ZONE</code></td>
865886
<td><code>TIME [(p)]</code></td>
866887
<td><code>DATE</code></td>
888+
<td><code>DATE</code></td>
867889
<td><code>TIME [(p)] [WITHOUT TIMEZONE]</code></td>
868890
</tr>
869891
<tr>
@@ -880,6 +902,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
880902
<td><code>DATETIME [(p)]</code></td>
881903
<td><code>TIMESTAMP [(p)] [WITHOUT TIMEZONE]</code></td>
882904
<td><code>TIMESTAMP [(p)] [WITHOUT TIMEZONE]</code></td>
905+
<td><code>TIMESTAMP [(p)] [WITHOUT TIMEZONE]</code></td>
883906
</tr>
884907
<tr>
885908
<td>
@@ -927,6 +950,14 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
927950
<code>NCHAR(n)</code><br>
928951
<code>VARCHAR2(n)</code><br>
929952
<code>CLOB</code></td>
953+
<td>
954+
<code>CHAR(n)</code><br>
955+
<code>CHARACTER(n)</code><br>
956+
<code>VARCHAR(n)</code><br>
957+
<code>CHARACTER VARYING(n)</code><br>
958+
<code>TEXT</code>
959+
<code>STRING</code>
960+
</td>
930961
<td><code>STRING</code></td>
931962
</tr>
932963
<tr>
@@ -951,7 +982,12 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
951982
<code>BLOB</code></td>
952983
<td>
953984
<code>RAW(s)</code><br>
954-
<code>BLOB</code></td>
985+
<code>BLOB</code>
986+
</td>
987+
<td>
988+
<code>BINARY(n)</code><br>
989+
<code>VARBINARY(n)</code><br>
990+
</td>
955991
<td><code>BYTES</code></td>
956992
</tr>
957993
<tr>
@@ -965,6 +1001,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
9651001
<td></td>
9661002
<td></td>
9671003
<td><code>ARRAY</code></td>
1004+
<td><code>ARRAY</code></td>
9681005
</tr>
9691006
</tbody>
9701007
</table>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
package org.apache.flink.connector.jdbc.databases.snowflake.dialect;
20+
21+
import org.apache.flink.connector.jdbc.dialect.JdbcDialectTypeTest;
22+
23+
import java.util.Arrays;
24+
import java.util.List;
25+
26+
/** Tests for all DataTypes and Dialects of JDBC Snowflake connector. */
27+
public class SnowflakeDialectTypeTest extends JdbcDialectTypeTest {
28+
@Override
29+
protected String testDialect() {
30+
return "snowflake";
31+
}
32+
33+
@Override
34+
protected List<JdbcDialectTypeTest.TestItem> testData() {
35+
return Arrays.asList(
36+
createTestItem("BOOLEAN"),
37+
38+
createTestItem("TINYINT"),
39+
createTestItem("SMALLINT"),
40+
createTestItem("BIGINT"),
41+
createTestItem("INT"),
42+
createTestItem("INTEGER"),
43+
44+
createTestItem("DECIMAL"),
45+
createTestItem("NUMERIC"),
46+
47+
createTestItem("DOUBLE"),
48+
createTestItem("FLOAT"),
49+
50+
createTestItem("DECIMAL(10, 4)"),
51+
createTestItem("DECIMAL(38, 18)"),
52+
createTestItem("VARCHAR"),
53+
createTestItem("CHAR"),
54+
createTestItem("VARBINARY"),
55+
createTestItem("DATE"),
56+
createTestItem("TIME"),
57+
createTestItem("TIMESTAMP(3)"),
58+
createTestItem("TIMESTAMP WITHOUT TIME ZONE"),
59+
createTestItem("TIMESTAMP(1) WITHOUT TIME ZONE"),
60+
// Not valid data
61+
createTestItem("TIMESTAMP_LTZ(3)", "Unsupported type:TIMESTAMP_LTZ(3)"));
62+
}
63+
}

0 commit comments

Comments
 (0)