embulk-output-mysql 0.6.1 → 0.6.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 03bd38c5d7d0940e028927fc85e85bec5b73bb24
4
- data.tar.gz: 08e939d20b51d4e3299740910846a6e89cd621d9
3
+ metadata.gz: 069acac0c6d408b6e2c2b4c4e95a1fec7a38be4c
4
+ data.tar.gz: 4235adc1b6848f48e3f22e0d97098508c5ffa929
5
5
  SHA512:
6
- metadata.gz: eb728ffff43b05e68c10208aa71df6a48a219945f88f9babebd22d17c6302826d962fcdf98b2fd5ef6f67e4418c7d0a0650110eabfd8ab21276cfdf9ff170aff
7
- data.tar.gz: 62b977143db7a65a527f7e316fa8a1f0fe5354eeb1cb3d3afb704d7e08f70f67e6f1c02137d1058fb6c017146173558d3596a12db2250e8c7ddc9283dbd6e5e8
6
+ metadata.gz: 54f83241c5c37fa5998d91e60b7c1cd2f1534a86a0ecddc58889093656477989bf28ca51124e744953687de867716903df259ca5dbd80e3146c869ef2ad728de
7
+ data.tar.gz: 3ee5327bd2930e5e17a8ee5ea3df9234afe58166be2e59c997943eeae11aed07be136d936b19215404dcb04dfefcf8babf81656731c773e214eab9cf59e56c37
data/README.md CHANGED
@@ -5,8 +5,8 @@ MySQL output plugins for Embulk loads records to MySQL.
5
5
  ## Overview
6
6
 
7
7
  * **Plugin type**: output
8
- * **Load all or nothing**: depnds on the mode. see below.
9
- * **Resume supported**: depnds on the mode. see below.
8
+ * **Load all or nothing**: depends on the mode. see below.
9
+ * **Resume supported**: depends on the mode. see below.
10
10
 
11
11
  ## Configuration
12
12
 
@@ -17,7 +17,11 @@ MySQL output plugins for Embulk loads records to MySQL.
17
17
  - **database**: destination database name (string, required)
18
18
  - **table**: destination table name (string, required)
19
19
  - **options**: extra connection properties (hash, default: {})
20
+ - **retry_limit** max retry count for database operations (integer, default: 12)
21
+ - **retry_wait** initial retry wait time in milliseconds (integer, default: 1000 (1 second))
22
+ - **max_retry_wait** upper limit of retry wait, which will be doubled at every retry (integer, default: 1800000 (30 minutes))
20
23
  - **mode**: "insert", "insert_direct", "truncate_insert", "merge", "merge_direct", or "replace". See below. (string, required)
24
+ - **merge_rule**: list of column assignments for updating existing records used in merge and merge_direct modes, for example `foo = target_table.foo + VALUES(foo)` in case of merge mode, or `foo = foo + VALUES(foo)` in case of merge_direct mode. (string array, default: always overwrites with new values)
21
25
  - **batch_size**: size of a single batch insert (integer, default: 16777216)
22
26
  - **default_timezone**: If input column type (embulk type) is timestamp, this plugin needs to format the timestamp into a SQL string. This default_timezone option is used to control the timezone. You can overwrite timezone for each columns using column_options option. (string, default: `UTC`)
23
27
  - **column_options**: advanced: a key-value pairs where key is a column name and value is options for the column.
@@ -1,6 +1,5 @@
1
1
  package org.embulk.output;
2
2
 
3
- import java.util.List;
4
3
  import java.util.Properties;
5
4
  import java.io.IOException;
6
5
  import java.sql.SQLException;
@@ -9,6 +8,7 @@ import org.embulk.config.Config;
9
8
  import org.embulk.config.ConfigDefault;
10
9
  import org.embulk.output.jdbc.AbstractJdbcOutputPlugin;
11
10
  import org.embulk.output.jdbc.BatchInsert;
11
+ import org.embulk.output.jdbc.MergeConfig;
12
12
  import org.embulk.output.mysql.MySQLOutputConnector;
13
13
  import org.embulk.output.mysql.MySQLBatchInsert;
14
14
 
@@ -104,8 +104,22 @@ public class MySQLOutputPlugin
104
104
  }
105
105
 
106
106
  @Override
107
- protected BatchInsert newBatchInsert(PluginTask task, Optional<List<String>> mergeKeys) throws IOException, SQLException
107
+ protected BatchInsert newBatchInsert(PluginTask task, Optional<MergeConfig> mergeConfig) throws IOException, SQLException
108
108
  {
109
- return new MySQLBatchInsert(getConnector(task, true), mergeKeys);
109
+ return new MySQLBatchInsert(getConnector(task, true), mergeConfig);
110
+ }
111
+
112
+
113
+ @Override
114
+ protected boolean isRetryableException(String sqlState, int errorCode)
115
+ {
116
+ switch (errorCode) {
117
+ case 1213: // ER_LOCK_DEADLOCK (Message: Deadlock found when trying to get lock; try restarting transaction)
118
+ return true;
119
+ case 1205: // ER_LOCK_WAIT_TIMEOUT (Message: Lock wait timeout exceeded; try restarting transaction)
120
+ return true;
121
+ default:
122
+ return false;
123
+ }
110
124
  }
111
125
  }
@@ -5,14 +5,15 @@ import java.io.IOException;
5
5
  import java.sql.Types;
6
6
  import java.sql.SQLException;
7
7
  import com.google.common.base.Optional;
8
+ import org.embulk.output.jdbc.MergeConfig;
8
9
  import org.embulk.output.jdbc.StandardBatchInsert;
9
10
 
10
11
  public class MySQLBatchInsert
11
12
  extends StandardBatchInsert
12
13
  {
13
- public MySQLBatchInsert(MySQLOutputConnector connector, Optional<List<String>> mergeKeys) throws IOException, SQLException
14
+ public MySQLBatchInsert(MySQLOutputConnector connector, Optional<MergeConfig> mergeConfig) throws IOException, SQLException
14
15
  {
15
- super(connector, mergeKeys);
16
+ super(connector, mergeConfig);
16
17
  }
17
18
 
18
19
  @Override
@@ -3,9 +3,11 @@ package org.embulk.output.mysql;
3
3
  import java.util.List;
4
4
  import java.sql.Connection;
5
5
  import java.sql.SQLException;
6
+
6
7
  import org.embulk.output.jdbc.JdbcColumn;
7
8
  import org.embulk.output.jdbc.JdbcSchema;
8
9
  import org.embulk.output.jdbc.JdbcOutputConnection;
10
+ import org.embulk.output.jdbc.MergeConfig;
9
11
 
10
12
  public class MySQLOutputConnection
11
13
  extends JdbcOutputConnection
@@ -18,50 +20,60 @@ public class MySQLOutputConnection
18
20
  }
19
21
 
20
22
  @Override
21
- protected String buildPreparedMergeSql(String toTable, JdbcSchema toTableSchema, List<String> mergeKeys) throws SQLException
23
+ protected String buildPreparedMergeSql(String toTable, JdbcSchema toTableSchema, MergeConfig mergeConfig) throws SQLException
22
24
  {
23
25
  StringBuilder sb = new StringBuilder();
24
26
 
25
27
  sb.append("INSERT INTO ");
26
28
  quoteIdentifierString(sb, toTable);
27
29
  sb.append(" (");
28
- for (int i=0; i < toTableSchema.getCount(); i++) {
30
+ for (int i = 0; i < toTableSchema.getCount(); i++) {
29
31
  if(i != 0) { sb.append(", "); }
30
32
  quoteIdentifierString(sb, toTableSchema.getColumnName(i));
31
33
  }
32
34
  sb.append(") VALUES (");
33
- for(int i=0; i < toTableSchema.getCount(); i++) {
35
+ for(int i = 0; i < toTableSchema.getCount(); i++) {
34
36
  if(i != 0) { sb.append(", "); }
35
37
  sb.append("?");
36
38
  }
37
39
  sb.append(")");
38
40
  sb.append(" ON DUPLICATE KEY UPDATE ");
39
- for (int i=0; i < toTableSchema.getCount(); i++) {
40
- if(i != 0) { sb.append(", "); }
41
- String columnName = quoteIdentifierString(toTableSchema.getColumnName(i));
42
- sb.append(columnName).append(" = VALUES(").append(columnName).append(")");
41
+ if (mergeConfig.getMergeRule().isPresent()) {
42
+ List<String> rule = mergeConfig.getMergeRule().get();
43
+ for (int i = 0; i < rule.size(); i++) {
44
+ if (i != 0) {
45
+ sb.append(", ");
46
+ }
47
+ sb.append(rule.get(i));
48
+ }
49
+ } else {
50
+ for (int i = 0; i < toTableSchema.getCount(); i++) {
51
+ if(i != 0) { sb.append(", "); }
52
+ String columnName = quoteIdentifierString(toTableSchema.getColumnName(i));
53
+ sb.append(columnName).append(" = VALUES(").append(columnName).append(")");
54
+ }
43
55
  }
44
56
 
45
57
  return sb.toString();
46
58
  }
47
59
 
48
60
  @Override
49
- protected String buildCollectMergeSql(List<String> fromTables, JdbcSchema schema, String toTable, List<String> mergeKeys) throws SQLException
61
+ protected String buildCollectMergeSql(List<String> fromTables, JdbcSchema schema, String toTable, MergeConfig mergeConfig) throws SQLException
50
62
  {
51
63
  StringBuilder sb = new StringBuilder();
52
64
 
53
65
  sb.append("INSERT INTO ");
54
66
  quoteIdentifierString(sb, toTable);
55
67
  sb.append(" (");
56
- for (int i=0; i < schema.getCount(); i++) {
68
+ for (int i = 0; i < schema.getCount(); i++) {
57
69
  if (i != 0) { sb.append(", "); }
58
70
  quoteIdentifierString(sb, schema.getColumnName(i));
59
71
  }
60
72
  sb.append(") ");
61
- for (int i=0; i < fromTables.size(); i++) {
73
+ for (int i = 0; i < fromTables.size(); i++) {
62
74
  if (i != 0) { sb.append(" UNION ALL "); }
63
75
  sb.append("SELECT ");
64
- for (int j=0; j < schema.getCount(); j++) {
76
+ for (int j = 0; j < schema.getCount(); j++) {
65
77
  if (j != 0) { sb.append(", "); }
66
78
  quoteIdentifierString(sb, schema.getColumnName(j));
67
79
  }
@@ -69,10 +81,20 @@ public class MySQLOutputConnection
69
81
  quoteIdentifierString(sb, fromTables.get(i));
70
82
  }
71
83
  sb.append(" ON DUPLICATE KEY UPDATE ");
72
- for (int i=0; i < schema.getCount(); i++) {
73
- if(i != 0) { sb.append(", "); }
74
- String columnName = quoteIdentifierString(schema.getColumnName(i));
75
- sb.append(columnName).append(" = VALUES(").append(columnName).append(")");
84
+ if (mergeConfig.getMergeRule().isPresent()) {
85
+ List<String> rule = mergeConfig.getMergeRule().get();
86
+ for (int i = 0; i < rule.size(); i++) {
87
+ if (i != 0) {
88
+ sb.append(", ");
89
+ }
90
+ sb.append(rule.get(i));
91
+ }
92
+ } else {
93
+ for (int i = 0; i < schema.getCount(); i++) {
94
+ if(i != 0) { sb.append(", "); }
95
+ String columnName = quoteIdentifierString(schema.getColumnName(i));
96
+ sb.append(columnName).append(" = VALUES(").append(columnName).append(")");
97
+ }
76
98
  }
77
99
 
78
100
  return sb.toString();
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-mysql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-23 00:00:00.000000000 Z
11
+ date: 2016-08-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -24,8 +24,8 @@ files:
24
24
  - src/main/java/org/embulk/output/mysql/MySQLBatchInsert.java
25
25
  - src/main/java/org/embulk/output/mysql/MySQLOutputConnection.java
26
26
  - src/main/java/org/embulk/output/mysql/MySQLOutputConnector.java
27
- - classpath/embulk-output-jdbc-0.6.1.jar
28
- - classpath/embulk-output-mysql-0.6.1.jar
27
+ - classpath/embulk-output-jdbc-0.6.2.jar
28
+ - classpath/embulk-output-mysql-0.6.2.jar
29
29
  - classpath/mysql-connector-java-5.1.34.jar
30
30
  homepage: https://github.com/embulk/embulk-output-jdbc
31
31
  licenses: