embulk-output-mysql 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +42 -0
- data/build.gradle +7 -0
- data/classpath/embulk-output-jdbc-0.1.0.jar +0 -0
- data/classpath/embulk-output-mysql-0.1.0.jar +0 -0
- data/classpath/mysql-connector-java-5.1.34.jar +0 -0
- data/lib/embulk/output/mysql.rb +3 -0
- data/src/main/java/org/embulk/output/MySQLOutputPlugin.java +72 -0
- data/src/main/java/org/embulk/output/mysql/MySQLBatchInsert.java +36 -0
- data/src/main/java/org/embulk/output/mysql/MySQLOutputConnection.java +30 -0
- data/src/main/java/org/embulk/output/mysql/MySQLOutputConnector.java +42 -0
- metadata +54 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c687ef3905d12e4eb083d8c8e9a94f792dce1682
|
4
|
+
data.tar.gz: c7dbe040a2b18064d4bf271f38a99489f557e32b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 40b00128822e262fe26428f6810f3a4eb4aaad591216511204b66894237a949a12df411fc37826762e67db7f700dc06d017962915c74434a1ec0a5eb8f9e7474
|
7
|
+
data.tar.gz: cb7f383e3c5c15f9350bab9c7b0410880aace46a6719b6f0e7f86ba1bc54cfbc53994e4c2217232bed02404c4b014c2ee804e46b731f712ddfb02a7b023ac683
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# MySQL output plugins for Embulk
|
2
|
+
|
3
|
+
MySQL output plugins for Embulk loads records to MySQL.
|
4
|
+
|
5
|
+
## Overview
|
6
|
+
|
7
|
+
* **Plugin type**: output
|
8
|
+
* **Load all or nothing**: depnds on the mode:
|
9
|
+
* **insert**: no
|
10
|
+
* **replace**: yes
|
11
|
+
* **Resume supported**: no
|
12
|
+
|
13
|
+
## Configuration
|
14
|
+
|
15
|
+
- **host**: database host name (string, required)
|
16
|
+
- **port**: database port number (integer, default: 3306)
|
17
|
+
- **user**: database login user name (string, required)
|
18
|
+
- **password**: database login password (string, default: "")
|
19
|
+
- **database**: destination database name (string, required)
|
20
|
+
- **table**: destination name (string, required)
|
21
|
+
- **mode**: "replace" or "insert" (string, required)
|
22
|
+
- **batch_size**: size of a single batch insert (integer, default: 16777216)
|
23
|
+
- **options**: extra connection properties (hash, default: {})
|
24
|
+
|
25
|
+
### Example
|
26
|
+
|
27
|
+
```yaml
|
28
|
+
out:
|
29
|
+
type: mysql
|
30
|
+
host: localhost
|
31
|
+
user: root
|
32
|
+
password: ""
|
33
|
+
database: my_database
|
34
|
+
table: my_table
|
35
|
+
mode: insert
|
36
|
+
```
|
37
|
+
|
38
|
+
### Build
|
39
|
+
|
40
|
+
```
|
41
|
+
$ ./gradlew gem
|
42
|
+
```
|
data/build.gradle
ADDED
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,72 @@
|
|
1
|
+
package org.embulk.output;
|
2
|
+
|
3
|
+
import java.util.Properties;
|
4
|
+
import java.io.IOException;
|
5
|
+
import java.sql.SQLException;
|
6
|
+
import java.sql.Connection;
|
7
|
+
import org.embulk.spi.Exec;
|
8
|
+
import org.embulk.output.jdbc.AbstractJdbcOutputPlugin;
|
9
|
+
import org.embulk.output.jdbc.JdbcOutputConnection;
|
10
|
+
import org.embulk.output.jdbc.BatchInsert;
|
11
|
+
import org.embulk.output.jdbc.JdbcOutputConnector;
|
12
|
+
import org.embulk.output.mysql.MySQLOutputConnector;
|
13
|
+
import org.embulk.output.mysql.MySQLBatchInsert;
|
14
|
+
|
15
|
+
public class MySQLOutputPlugin
|
16
|
+
extends AbstractJdbcOutputPlugin
|
17
|
+
{
|
18
|
+
private static final int DEFAULT_PORT = 3306;
|
19
|
+
|
20
|
+
@Override
|
21
|
+
protected MySQLOutputConnector getConnector(PluginTask task, boolean retryableMetadataOperation)
|
22
|
+
{
|
23
|
+
String url = String.format("jdbc:mysql://%s:%d/%s",
|
24
|
+
task.getHost(), task.getPort().or(DEFAULT_PORT), task.getDatabase());
|
25
|
+
|
26
|
+
Properties props = new Properties();
|
27
|
+
props.setProperty("user", task.getUser());
|
28
|
+
props.setProperty("password", task.getPassword());
|
29
|
+
|
30
|
+
props.setProperty("rewriteBatchedStatements", "true");
|
31
|
+
props.setProperty("useCompression", "true");
|
32
|
+
|
33
|
+
props.setProperty("connectTimeout", "300000"); // milliseconds
|
34
|
+
props.setProperty("socketTimeout", "1800000"); // smillieconds
|
35
|
+
|
36
|
+
// Enable keepalive based on tcp_keepalive_time, tcp_keepalive_intvl and tcp_keepalive_probes kernel parameters.
|
37
|
+
// Socket options TCP_KEEPCNT, TCP_KEEPIDLE, and TCP_KEEPINTVL are not configurable.
|
38
|
+
props.setProperty("tcpKeepAlive", "true");
|
39
|
+
|
40
|
+
// TODO
|
41
|
+
//switch task.getSssl() {
|
42
|
+
//when "disable":
|
43
|
+
// break;
|
44
|
+
//when "enable":
|
45
|
+
// props.setProperty("useSSL", "true");
|
46
|
+
// props.setProperty("requireSSL", "false");
|
47
|
+
// props.setProperty("verifyServerCertificate", "false");
|
48
|
+
// break;
|
49
|
+
//when "verify":
|
50
|
+
// props.setProperty("useSSL", "true");
|
51
|
+
// props.setProperty("requireSSL", "true");
|
52
|
+
// props.setProperty("verifyServerCertificate", "true");
|
53
|
+
// break;
|
54
|
+
//}
|
55
|
+
|
56
|
+
if (!retryableMetadataOperation) {
|
57
|
+
// non-retryable batch operation uses longer timeout
|
58
|
+
props.setProperty("connectTimeout", "300000"); // milliseconds
|
59
|
+
props.setProperty("socketTimeout", "2700000"); // milliseconds
|
60
|
+
}
|
61
|
+
|
62
|
+
props.putAll(task.getOptions());
|
63
|
+
|
64
|
+
return new MySQLOutputConnector(url, props);
|
65
|
+
}
|
66
|
+
|
67
|
+
@Override
|
68
|
+
protected BatchInsert newBatchInsert(PluginTask task) throws IOException, SQLException
|
69
|
+
{
|
70
|
+
return new MySQLBatchInsert(getConnector(task, true));
|
71
|
+
}
|
72
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
package org.embulk.output.mysql;
|
2
|
+
|
3
|
+
import java.io.IOException;
|
4
|
+
import java.sql.Types;
|
5
|
+
import java.sql.PreparedStatement;
|
6
|
+
import java.sql.SQLException;
|
7
|
+
import org.embulk.output.jdbc.StandardBatchInsert;
|
8
|
+
|
9
|
+
public class MySQLBatchInsert
|
10
|
+
extends StandardBatchInsert
|
11
|
+
{
|
12
|
+
public MySQLBatchInsert(MySQLOutputConnector connector) throws IOException, SQLException
|
13
|
+
{
|
14
|
+
super(connector);
|
15
|
+
}
|
16
|
+
|
17
|
+
@Override
|
18
|
+
public void setFloat(float v) throws IOException, SQLException
|
19
|
+
{
|
20
|
+
if (Float.isNaN(v) || Float.isInfinite(v)) {
|
21
|
+
setNull(Types.REAL); // TODO get through argument
|
22
|
+
} else {
|
23
|
+
super.setFloat(v);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
@Override
|
28
|
+
public void setDouble(double v) throws IOException, SQLException
|
29
|
+
{
|
30
|
+
if (Double.isNaN(v) || Double.isInfinite(v)) {
|
31
|
+
setNull(Types.DOUBLE); // TODO get through argument
|
32
|
+
} else {
|
33
|
+
super.setDouble(v);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
package org.embulk.output.mysql;
|
2
|
+
|
3
|
+
import java.sql.Connection;
|
4
|
+
import java.sql.SQLException;
|
5
|
+
import org.embulk.spi.Exec;
|
6
|
+
import org.embulk.output.jdbc.BatchInsert;
|
7
|
+
import org.embulk.output.jdbc.JdbcOutputConnection;
|
8
|
+
import org.embulk.output.jdbc.JdbcColumn;
|
9
|
+
|
10
|
+
public class MySQLOutputConnection
|
11
|
+
extends JdbcOutputConnection
|
12
|
+
{
|
13
|
+
public MySQLOutputConnection(Connection connection, boolean autoCommit)
|
14
|
+
throws SQLException
|
15
|
+
{
|
16
|
+
super(connection, null);
|
17
|
+
connection.setAutoCommit(autoCommit);
|
18
|
+
}
|
19
|
+
|
20
|
+
@Override
|
21
|
+
protected String convertTypeName(String typeName)
|
22
|
+
{
|
23
|
+
switch(typeName) {
|
24
|
+
case "CLOB":
|
25
|
+
return "TEXT";
|
26
|
+
default:
|
27
|
+
return typeName;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
package org.embulk.output.mysql;
|
2
|
+
|
3
|
+
import java.util.Properties;
|
4
|
+
import java.sql.Driver;
|
5
|
+
import java.sql.Connection;
|
6
|
+
import java.sql.SQLException;
|
7
|
+
import org.embulk.output.jdbc.JdbcOutputConnector;
|
8
|
+
import org.embulk.output.jdbc.JdbcOutputConnection;
|
9
|
+
|
10
|
+
public class MySQLOutputConnector
|
11
|
+
implements JdbcOutputConnector
|
12
|
+
{
|
13
|
+
private final Driver driver;
|
14
|
+
private final String url;
|
15
|
+
private final Properties properties;
|
16
|
+
|
17
|
+
public MySQLOutputConnector(String url, Properties properties)
|
18
|
+
{
|
19
|
+
try {
|
20
|
+
this.driver = new com.mysql.jdbc.Driver(); // new com.mysql.jdbc.Driver throws SQLException
|
21
|
+
} catch (SQLException ex) {
|
22
|
+
throw new RuntimeException(ex);
|
23
|
+
}
|
24
|
+
this.url = url;
|
25
|
+
this.properties = properties;
|
26
|
+
}
|
27
|
+
|
28
|
+
@Override
|
29
|
+
public MySQLOutputConnection connect(boolean autoCommit) throws SQLException
|
30
|
+
{
|
31
|
+
Connection c = driver.connect(url, properties);
|
32
|
+
try {
|
33
|
+
MySQLOutputConnection con = new MySQLOutputConnection(c, autoCommit);
|
34
|
+
c = null;
|
35
|
+
return con;
|
36
|
+
} finally {
|
37
|
+
if (c != null) {
|
38
|
+
c.close();
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: embulk-output-mysql
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- FURUHASHI Sadayuki
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-16 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: JDBC output plugin is an Embulk plugin that loads records to JDBC read by any input plugins. Search the input plugins by "embulk-input" keyword.
|
14
|
+
email:
|
15
|
+
- frsyuki@users.sourceforge.jp
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- README.md
|
21
|
+
- build.gradle
|
22
|
+
- lib/embulk/output/mysql.rb
|
23
|
+
- src/main/java/org/embulk/output/MySQLOutputPlugin.java
|
24
|
+
- src/main/java/org/embulk/output/mysql/MySQLBatchInsert.java
|
25
|
+
- src/main/java/org/embulk/output/mysql/MySQLOutputConnection.java
|
26
|
+
- src/main/java/org/embulk/output/mysql/MySQLOutputConnector.java
|
27
|
+
- classpath/embulk-output-jdbc-0.1.0.jar
|
28
|
+
- classpath/embulk-output-mysql-0.1.0.jar
|
29
|
+
- classpath/mysql-connector-java-5.1.34.jar
|
30
|
+
homepage: https://github.com/embulk/embulk-output-jdbc
|
31
|
+
licenses:
|
32
|
+
- Apache 2.0
|
33
|
+
metadata: {}
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirements: []
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 2.1.9
|
51
|
+
signing_key:
|
52
|
+
specification_version: 4
|
53
|
+
summary: JDBC output plugin for Embulk
|
54
|
+
test_files: []
|