Skip to content

Commit 027afc6

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

File tree

2 files changed

+114
-13
lines changed

2 files changed

+114
-13
lines changed

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

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,18 @@ See how to link with it for cluster execution [here]({{< ref "docs/dev/configura
4545

4646
A driver dependency is also required to connect to a specified database. Here are drivers currently supported:
4747

48-
| Driver | Group Id | Artifact Id | JAR |
49-
|:-----------|:---------------------------|:-----------------------|:----------------------------------------------------------------------------------------------------------------------------------|
50-
| MySQL | `mysql` | `mysql-connector-java` | [Download](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
51-
| Oracle | `com.oracle.database.jdbc` | `ojdbc8` | [Download](https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8) |
52-
| PostgreSQL | `org.postgresql` | `postgresql` | [Download](https://jdbc.postgresql.org/download/) |
53-
| Derby | `org.apache.derby` | `derby` | [Download](http://db.apache.org/derby/derby_downloads.html) |
54-
| SQL Server | `com.microsoft.sqlserver` | `mssql-jdbc` | [Download](https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver16) |
55-
| CrateDB | `io.crate` | `crate-jdbc` | [Download](https://repo1.maven.org/maven2/io/crate/crate-jdbc/) |
56-
| Db2 | `com.ibm.db2.jcc` | `db2jcc` | [Download](https://www.ibm.com/support/pages/download-db2-fix-packs-version-db2-linux-unix-and-windows) |
57-
| 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-
48+
| Driver | Group Id | Artifact Id | JAR |
49+
|:-----------|:----------------------------|:------------------------|:----------------------------------------------------------------------------------------------------------------------------------|
50+
| MySQL | `mysql` | `mysql-connector-java` | [Download](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
51+
| Oracle | `com.oracle.database.jdbc` | `ojdbc8` | [Download](https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8) |
52+
| PostgreSQL | `org.postgresql` | `postgresql` | [Download](https://jdbc.postgresql.org/download/) |
53+
| Derby | `org.apache.derby` | `derby` | [Download](http://db.apache.org/derby/derby_downloads.html) |
54+
| SQL Server | `com.microsoft.sqlserver` | `mssql-jdbc` | [Download](https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver16) |
55+
| CrateDB | `io.crate` | `crate-jdbc` | [Download](https://repo1.maven.org/maven2/io/crate/crate-jdbc/) |
56+
| Db2 | `com.ibm.db2.jcc` | `db2jcc` | [Download](https://www.ibm.com/support/pages/download-db2-fix-packs-version-db2-linux-unix-and-windows) |
57+
| 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+
| Snowflake | `net.snowflake` | `snowflake-jdbc` | [Download](https://repo1.maven.org/maven2/net/snowflake/snowflake-jdbc/)
6060

6161
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" >}}).
6262

@@ -433,6 +433,13 @@ As there is no standard syntax for upsert, the following table describes the dat
433433
WHEN NOT MATCHED THEN INSERT (..) <br>
434434
VALUES (..)</td>
435435
</tr>
436+
<tr>
437+
<td>Snowflake</td>
438+
<td>MERGE INTO .. USING (..) ON (..) <br>
439+
WHEN MATCHED THEN UPDATE SET (..) <br>
440+
WHEN NOT MATCHED THEN INSERT (..) <br>
441+
VALUES (..)</td>
442+
</tr>
436443
</tbody>
437444
</table>
438445

@@ -670,6 +677,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
670677
<th class="text-left"><a href="https://trino.io/docs/current/language/types.html">Trino type</a></th>
671678
<th class="text-left"><a href="https://en.oceanbase.com/docs/common-oceanbase-database-10000000001106898">OceanBase MySQL mode type</a></th>
672679
<th class="text-left"><a href="https://en.oceanbase.com/docs/common-oceanbase-database-10000000001107076">OceanBase Oracle mode type</a></th>
680+
<th class="text-left"><a href="https://docs.snowflake.com/en/sql-reference-data-types">Snowflake</a></th>
673681
<th class="text-left"><a href="{{< ref "docs/dev/table/types" >}}">Flink SQL type</a></th>
674682
</tr>
675683
</thead>
@@ -684,6 +692,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
684692
<td><code>TINYINT</code></td>
685693
<td><code>TINYINT</code></td>
686694
<td></td>
695+
<td></td>
687696
<td><code>TINYINT</code></td>
688697
</tr>
689698
<tr>
@@ -706,6 +715,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
706715
<code>SMALLINT</code><br>
707716
<code>TINYINT UNSIGNED</code></td>
708717
<td></td>
718+
<td>SMALLINT</td>
709719
<td><code>SMALLINT</code></td>
710720
</tr>
711721
<tr>
@@ -728,6 +738,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
728738
<code>MEDIUMINT</code><br>
729739
<code>SMALLINT UNSIGNED</code></td>
730740
<td></td>
741+
<td>INT</td>
731742
<td><code>INT</code></td>
732743
</tr>
733744
<tr>
@@ -748,6 +759,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
748759
<code>BIGINT</code><br>
749760
<code>INT UNSIGNED</code></td>
750761
<td></td>
762+
<td>BIGINT</td>
751763
<td><code>BIGINT</code></td>
752764
</tr>
753765
<tr>
@@ -760,6 +772,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
760772
<td></td>
761773
<td><code>BIGINT UNSIGNED</code></td>
762774
<td></td>
775+
<td></td>
763776
<td><code>DECIMAL(20, 0)</code></td>
764777
</tr>
765778
<tr>
@@ -778,6 +791,9 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
778791
<td><code>FLOAT</code></td>
779792
<td>
780793
<code>BINARY_FLOAT</code></td>
794+
<td>
795+
<code>REAL</code><br>
796+
<code>FLOAT</code></td>
781797
<td><code>FLOAT</code></td>
782798
</tr>
783799
<tr>
@@ -796,6 +812,9 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
796812
<td><code>DOUBLE</code></td>
797813
<td><code>DOUBLE</code></td>
798814
<td><code>BINARY_DOUBLE</code></td>
815+
<td>
816+
<code>DOUBLE</code><br>
817+
<code>DOUBLE PRECISION</code></td>
799818
<td><code>DOUBLE</code></td>
800819
</tr>
801820
<tr>
@@ -824,6 +843,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
824843
<td>
825844
<code>FLOAT(s)</code><br>
826845
<code>NUMBER(p, s)</code></td>
846+
<td><code>NUMERIC(p, s)</code></td>
827847
<td><code>DECIMAL(p, s)</code></td>
828848
</tr>
829849
<tr>
@@ -841,6 +861,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
841861
<code>TINYINT(1)</code></td>
842862
<td></td>
843863
<td><code>BOOLEAN</code></td>
864+
<td><code>BOOLEAN</code></td>
844865
</tr>
845866
<tr>
846867
<td><code>DATE</code></td>
@@ -853,6 +874,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
853874
<td><code>DATE</code></td>
854875
<td><code>DATE</code></td>
855876
<td><code>DATE</code></td>
877+
<td><code>DATE</code></td>
856878
</tr>
857879
<tr>
858880
<td><code>TIME [(p)]</code></td>
@@ -864,6 +886,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
864886
<td><code>TIME_WITHOUT_TIME_ZONE</code></td>
865887
<td><code>TIME [(p)]</code></td>
866888
<td><code>DATE</code></td>
889+
<td><code>DATE</code></td>
867890
<td><code>TIME [(p)] [WITHOUT TIMEZONE]</code></td>
868891
</tr>
869892
<tr>
@@ -880,6 +903,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
880903
<td><code>DATETIME [(p)]</code></td>
881904
<td><code>TIMESTAMP [(p)] [WITHOUT TIMEZONE]</code></td>
882905
<td><code>TIMESTAMP [(p)] [WITHOUT TIMEZONE]</code></td>
906+
<td><code>TIMESTAMP [(p)] [WITHOUT TIMEZONE]</code></td>
883907
</tr>
884908
<tr>
885909
<td>
@@ -927,6 +951,14 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
927951
<code>NCHAR(n)</code><br>
928952
<code>VARCHAR2(n)</code><br>
929953
<code>CLOB</code></td>
954+
<td>
955+
<code>CHAR(n)</code><br>
956+
<code>CHARACTER(n)</code><br>
957+
<code>VARCHAR(n)</code><br>
958+
<code>CHARACTER VARYING(n)</code><br>
959+
<code>TEXT</code>
960+
<code>STRING</code>
961+
</td>
930962
<td><code>STRING</code></td>
931963
</tr>
932964
<tr>
@@ -951,7 +983,12 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
951983
<code>BLOB</code></td>
952984
<td>
953985
<code>RAW(s)</code><br>
954-
<code>BLOB</code></td>
986+
<code>BLOB</code>
987+
</td>
988+
<td>
989+
<code>BINARY(n)</code><br>
990+
<code>VARBINARY(n)</code><br>
991+
</td>
955992
<td><code>BYTES</code></td>
956993
</tr>
957994
<tr>
@@ -965,6 +1002,7 @@ Flink supports connect to several databases which uses dialect like MySQL, Oracl
9651002
<td></td>
9661003
<td></td>
9671004
<td><code>ARRAY</code></td>
1005+
<td><code>ARRAY</code></td>
9681006
</tr>
9691007
</tbody>
9701008
</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)