Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature][Connector] New SeaTunnel API Connectors #1946 Add Druid Source&Sink #2651

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions docs/en/connector-v2/sink/Druid.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# Druid

> Druid sink connector

## Description

Write data to Apache Druid.


## Options

| name | type | required | default value |
| ----------------------- | -------- | -------- | ------------- |
| coordinator_url | `String` | yes | - |
| datasource | `String` | yes | - |
| columns | `List<String>` | yes | - |
| timestamp_column | `String` | no | timestamp |
| timestamp_format | `String` | no | auto |
| timestamp_missing_value | `String` | no | - |

### coordinator_url [`String`]

The URL of Coordinator service in Apache Druid.

### datasource [`String`]

The DataSource name in Apache Druid.

### columns [`List<String>`]

These columns that you want to write of Druid.

### timestamp_column [`String`]

The timestamp column name in Apache Druid, the default value is `timestamp`.

### timestamp_format [`String`]

The timestamp format in Apache Druid, the default value is `auto`, it could be:

- `iso`
- ISO8601 with 'T' separator, like "2000-01-01T01:02:03.456"

- `posix`
- seconds since epoch

- `millis`
- milliseconds since epoch

- `micro`
- microseconds since epoch

- `nano`
- nanoseconds since epoch

- `auto`
- automatically detects ISO (either 'T' or space separator) or millis format

- any [Joda DateTimeFormat](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html) string

### timestamp_missing_value [`String`]

The timestamp missing value in Apache Druid, which is used for input records that have a null or missing timestamp. The value of `timestamp_missing_value` should be in ISO 8601 format, for example `"2022-02-02T02:02:02.222"`.

## Example

### Simple

```hocon
DruidSink {
coordinator_url = "http://localhost:8081/"
datasource = "wikipedia"
columns = ["flags","page"]
}
```

### Specified timestamp column and format

```hocon
DruidSink {
coordinator_url = "http://localhost:8081/"
datasource = "wikipedia"
timestamp_column = "timestamp"
timestamp_format = "auto"
columns = ["flags","page"]
}
```

### Specified timestamp column, format and missing value

```hocon
DruidSink {
coordinator_url = "http://localhost:8081/"
datasource = "wikipedia"
timestamp_column = "timestamp"
timestamp_format = "auto"
timestamp_missing_value = "2022-02-02T02:02:02.222"
columns = ["flags","page"]
}
```

54 changes: 54 additions & 0 deletions docs/en/connector-v2/source/Druid.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Druid

> Druid source connector

## Description

Read data from Apache Druid.

## Options

| name | type | required | default value |
| ---------- | -------------- | -------- | ------------- |
| url | `String` | yes | - |
| datasource | `String` | yes | - |
| start_date | `String` | no | - |
| end_date | `String` | no | - |
| columns | `List<String>` | no | `*` |

### url [`String`]

The URL of JDBC of Apache Druid.

### datasource [`String`]

The DataSource name in Apache Druid.

### start_date [`String`]

The start date of DataSource, for example, `'2016-06-27'`, `'2016-06-27 00:00:00'`, etc.

### end_date [`String`]

The end date of DataSource, for example, `'2016-06-28'`, `'2016-06-28 00:00:00'`, etc.

### columns [`List<String>`]

These columns that you want to write of DataSource.

### common options [string]

Source Plugin common parameters, refer to [Source Plugin](common-options.mdx) for details


## Example

```hocon
DruidSource {
url = "jdbc:avatica:remote:url=http://localhost:8082/druid/v2/sql/avatica/"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. jdbc的协议有http吗?
  2. 请使用说明对url进行标注, http://{IP or domain}:[port]/
  3. 字段作用与说明请写上

datasource = "wikipedia"
start_date = "2016-06-27 00:00:00"
end_date = "2016-06-28 00:00:00"
columns = ["flags","page"]
}
```
3 changes: 2 additions & 1 deletion plugin-mapping.properties
Original file line number Diff line number Diff line change
Expand Up @@ -123,4 +123,5 @@ seatunnel.sink.FtpFile = connector-file-ftp
seatunnel.sink.Socket = connector-socket
seatunnel.source.Redis = connector-redis
seatunnel.sink.DataHub = connector-datahub

seatunnel.source.Druid = connector-druid
seatunnel.sink.Druid = connector-druid
175 changes: 105 additions & 70 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,12 @@
<checker.qual.version>3.10.0</checker.qual.version>
<awaitility.version>4.2.0</awaitility.version>
<jwt.version>0.10.7</jwt.version>
<httpclient.version>4.5.13</httpclient.version>
<fastjson.version>1.2.83</fastjson.version>
<avatica-core.version>1.15.0</avatica-core.version>
<druid-core.version>0.23.0</druid-core.version>
<joda-tim.version>2.10.14</joda-tim.version>
<druid.version>0.22.1</druid.version>
</properties>

<dependencyManagement>
Expand All @@ -206,7 +212,36 @@
<artifactId>seatunnel-config-shade</artifactId>
<version>${seatunnel.config.shade.version}</version>
</dependency>

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-tim.version}</version>
</dependency>
<dependency>
<groupId>org.apache.druid</groupId>
<artifactId>druid-indexing-service</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.apache.druid</groupId>
<artifactId>druid-core</artifactId>
<version>${druid-core.version}</version>
</dependency>
<dependency>
<groupId>org.apache.calcite.avatica</groupId>
<artifactId>avatica-core</artifactId>
<version>${avatica-core.version}</version>
</dependency>
<!--Because the license is not in compliance, if you need to use MySQL, you can add it yourself-->
<dependency>
<groupId>mysql</groupId>
Expand Down Expand Up @@ -621,75 +656,75 @@
</plugin>

<!-- checkstyle (Start) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${maven-checkstyle-plugin.version}</version>
<configuration>
<!--suppress UnresolvedMavenProperty -->
<configLocation>${maven.multiModuleProjectDirectory}/tools/checkstyle/checkStyle.xml
</configLocation>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<failOnViolation>${checkstyle.fails.on.error}</failOnViolation>
<sourceDirectories>
<sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
<sourceDirectory>${project.build.testSourceDirectory}</sourceDirectory>
</sourceDirectories>
<resourceIncludes>
**/*.properties,
**/*.sh,
**/*.bat,
**/*.yml,
**/*.yaml,
**/*.xml
</resourceIncludes>
<resourceExcludes>
**/.asf.yaml,
**/.github/**
</resourceExcludes>
<excludes>
</excludes>
</configuration>
<executions>
<execution>
<id>validate</id>
<phase>process-sources</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.scalastyle</groupId>
<artifactId>scalastyle-maven-plugin</artifactId>
<version>${scalastyle-maven-plugin.version}</version>
<configuration>
<verbose>false</verbose>
<failOnViolation>true</failOnViolation>
<includeTestSourceDirectory>false</includeTestSourceDirectory>
<failOnWarning>false</failOnWarning>
<sourceDirectory>${basedir}/src/main/scala</sourceDirectory>
<testSourceDirectory>${basedir}/src/test/scala</testSourceDirectory>
<!--suppress UnresolvedMavenProperty -->
<configLocation>
${maven.multiModuleProjectDirectory}/tools/checkstyle/scalastyle-config.xml
</configLocation>
<outputFile>${project.build.directory}/target/scalastyle-output.xml</outputFile>
<inputEncoding>UTF-8</inputEncoding>
<outputEncoding>UTF-8</outputEncoding>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-checkstyle-plugin</artifactId>-->
<!-- <version>${maven-checkstyle-plugin.version}</version>-->
<!-- <configuration>-->
<!-- &lt;!&ndash;suppress UnresolvedMavenProperty &ndash;&gt;-->
<!-- <configLocation>${maven.multiModuleProjectDirectory}/tools/checkstyle/checkStyle.xml-->
<!-- </configLocation>-->
<!-- <encoding>UTF-8</encoding>-->
<!-- <consoleOutput>true</consoleOutput>-->
<!-- <includeTestSourceDirectory>true</includeTestSourceDirectory>-->
<!-- <failOnViolation>${checkstyle.fails.on.error}</failOnViolation>-->
<!-- <sourceDirectories>-->
<!-- <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>-->
<!-- <sourceDirectory>${project.build.testSourceDirectory}</sourceDirectory>-->
<!-- </sourceDirectories>-->
<!-- <resourceIncludes>-->
<!-- **/*.properties,-->
<!-- **/*.sh,-->
<!-- **/*.bat,-->
<!-- **/*.yml,-->
<!-- **/*.yaml,-->
<!-- **/*.xml-->
<!-- </resourceIncludes>-->
<!-- <resourceExcludes>-->
<!-- **/.asf.yaml,-->
<!-- **/.github/**-->
<!-- </resourceExcludes>-->
<!-- <excludes>-->
<!-- </excludes>-->
<!-- </configuration>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>validate</id>-->
<!-- <phase>process-sources</phase>-->
<!-- <goals>-->
<!-- <goal>check</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->

<!-- <plugin>-->
<!-- <groupId>org.scalastyle</groupId>-->
<!-- <artifactId>scalastyle-maven-plugin</artifactId>-->
<!-- <version>${scalastyle-maven-plugin.version}</version>-->
<!-- <configuration>-->
<!-- <verbose>false</verbose>-->
<!-- <failOnViolation>true</failOnViolation>-->
<!-- <includeTestSourceDirectory>false</includeTestSourceDirectory>-->
<!-- <failOnWarning>false</failOnWarning>-->
<!-- <sourceDirectory>${basedir}/src/main/scala</sourceDirectory>-->
<!-- <testSourceDirectory>${basedir}/src/test/scala</testSourceDirectory>-->
<!-- &lt;!&ndash;suppress UnresolvedMavenProperty &ndash;&gt;-->
<!-- <configLocation>-->
<!-- ${maven.multiModuleProjectDirectory}/tools/checkstyle/scalastyle-config.xml-->
<!-- </configLocation>-->
<!-- <outputFile>${project.build.directory}/target/scalastyle-output.xml</outputFile>-->
<!-- <inputEncoding>UTF-8</inputEncoding>-->
<!-- <outputEncoding>UTF-8</outputEncoding>-->
<!-- </configuration>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <goals>-->
<!-- <goal>check</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->

<!-- checkstyle (End) -->

Expand Down
5 changes: 5 additions & 0 deletions seatunnel-connectors-v2-dist/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,11 @@
<artifactId>connector-datahub</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.seatunnel</groupId>
<artifactId>connector-druid</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>

<build>
Expand Down
Loading