embulk-input-mysql 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +10 -1
- data/classpath/{embulk-input-jdbc-0.2.1.jar → embulk-input-jdbc-0.2.2.jar} +0 -0
- data/classpath/embulk-input-mysql-0.2.2.jar +0 -0
- data/src/main/java/org/embulk/input/MySQLInputPlugin.java +10 -0
- data/src/main/java/org/embulk/input/mysql/MySQLInputConnection.java +19 -0
- metadata +4 -4
- data/classpath/embulk-input-mysql-0.2.1.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a09bee0f3126d679f39ab5f84f1eff085565f573
|
4
|
+
data.tar.gz: 216094c890843f89ede7e06717029f729e2d3f74
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66b22834a187504875f27de487f1e994d2e8f7bf7e27a4da4a8ef7e00aae67005db73b05c0e81383947170016ab9c00c665d6955489babc511ec0845eedceb33
|
7
|
+
data.tar.gz: f802830a593f06048d37dd710b7e178e3efe7c2dfd1f0ab6e53f6e29d28a70f026402a6e2675ac13fb65ef608f41e2f812ddae0e65ffe8bf83bbcdc5730495db
|
data/README.md
CHANGED
@@ -17,7 +17,16 @@ MySQL input plugins for Embulk loads records from MySQL.
|
|
17
17
|
- **table**: destination name (string, required)
|
18
18
|
- **select**: comma-separated list of columns to select (string, default: "*")
|
19
19
|
- **where**: WHERE condition to filter the rows (string, default: no-condition)
|
20
|
-
- **fetch_rows**: number of rows to fetch one time (
|
20
|
+
- **fetch_rows**: number of rows to fetch one time (integer, default: 10000)
|
21
|
+
- If this value is set to > 1:
|
22
|
+
- It uses a server-side prepared statement and fetches rows by chunks.
|
23
|
+
- Internally, `useCursorFetch=true` is enabled and `java.sql.Statement.setFetchSize` is set to the configured value.
|
24
|
+
- If this value is set to 1:
|
25
|
+
- It uses a client-side built statement and fetches rows one by one.
|
26
|
+
- Internally, `useCursorFetch=false` is used and `java.sql.Statement.setFetchSize` is set to Integer.MIN_VALUE.
|
27
|
+
- If this value is set to -1:
|
28
|
+
- It uses a client-side built statement and fetches all rows at once. This may cause OutOfMemoryError.
|
29
|
+
- Internally, `useCursorFetch=false` is used and `java.sql.Statement.setFetchSize` is not set.
|
21
30
|
- **options**: extra JDBC properties (hash, default: {})
|
22
31
|
|
23
32
|
## Example
|
Binary file
|
Binary file
|
@@ -6,6 +6,7 @@ import java.sql.Driver;
|
|
6
6
|
import java.sql.SQLException;
|
7
7
|
import com.google.common.base.Throwables;
|
8
8
|
import org.embulk.config.Config;
|
9
|
+
import org.embulk.config.ConfigDefault;
|
9
10
|
import org.embulk.input.jdbc.AbstractJdbcInputPlugin;
|
10
11
|
import org.embulk.input.mysql.MySQLInputConnection;
|
11
12
|
|
@@ -53,6 +54,15 @@ public class MySQLInputPlugin
|
|
53
54
|
// break;
|
54
55
|
//}
|
55
56
|
|
57
|
+
if (task.getFetchRows() == 1) {
|
58
|
+
logger.info("Fetch size is 1. Fetching rows one by one.");
|
59
|
+
} else if (task.getFetchRows() <= 0) {
|
60
|
+
logger.info("Fetch size is set to -1. Fetching all rows at once.");
|
61
|
+
} else {
|
62
|
+
logger.info("Fetch size is {}. Using server-side prepared statement.", task.getFetchRows());
|
63
|
+
props.setProperty("useCursorFetch", "true");
|
64
|
+
}
|
65
|
+
|
56
66
|
props.putAll(task.getOptions());
|
57
67
|
|
58
68
|
Driver driver;
|
@@ -3,6 +3,7 @@ package org.embulk.input.mysql;
|
|
3
3
|
import java.sql.Connection;
|
4
4
|
import java.sql.PreparedStatement;
|
5
5
|
import java.sql.SQLException;
|
6
|
+
import java.sql.ResultSet;
|
6
7
|
import org.embulk.input.jdbc.JdbcInputConnection;
|
7
8
|
|
8
9
|
public class MySQLInputConnection
|
@@ -13,4 +14,22 @@ public class MySQLInputConnection
|
|
13
14
|
{
|
14
15
|
super(connection, null);
|
15
16
|
}
|
17
|
+
|
18
|
+
@Override
|
19
|
+
protected BatchSelect newBatchSelect(String select, int fetchRows) throws SQLException
|
20
|
+
{
|
21
|
+
logger.info("SQL: " + select);
|
22
|
+
PreparedStatement stmt = connection.prepareStatement(select, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); // TYPE_FORWARD_ONLY and CONCUR_READ_ONLY are default
|
23
|
+
if (fetchRows == 1) {
|
24
|
+
// See MySQLInputPlugin.newConnection doesn't set useCursorFetch=true when fetchRows=1
|
25
|
+
// MySQL Connector/J keeps the connection opened and process rows one by one with Integer.MIN_VALUE.
|
26
|
+
stmt.setFetchSize(Integer.MIN_VALUE);
|
27
|
+
} else if (fetchRows <= 0) {
|
28
|
+
// uses the default behavior. MySQL Connector/J fetches the all rows in memory.
|
29
|
+
} else {
|
30
|
+
// useCursorFetch=true is enabled. MySQL creates temporary table and uses multiple select statements to fetch rows.
|
31
|
+
stmt.setFetchSize(fetchRows);
|
32
|
+
}
|
33
|
+
return new SingleSelect(stmt);
|
34
|
+
}
|
16
35
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-mysql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- FURUHASHI Sadayuki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: JDBC input plugin is an Embulk plugin that loads records from JDBC so that any output plugins can receive the records. Search the output plugins by "embulk-output" keyword.
|
14
14
|
email:
|
@@ -22,8 +22,8 @@ files:
|
|
22
22
|
- lib/embulk/input/mysql.rb
|
23
23
|
- src/main/java/org/embulk/input/MySQLInputPlugin.java
|
24
24
|
- src/main/java/org/embulk/input/mysql/MySQLInputConnection.java
|
25
|
-
- classpath/embulk-input-jdbc-0.2.
|
26
|
-
- classpath/embulk-input-mysql-0.2.
|
25
|
+
- classpath/embulk-input-jdbc-0.2.2.jar
|
26
|
+
- classpath/embulk-input-mysql-0.2.2.jar
|
27
27
|
- classpath/mysql-connector-java-5.1.34.jar
|
28
28
|
homepage: https://github.com/embulk/embulk-input-jdbc
|
29
29
|
licenses:
|
Binary file
|