embulk-input-mysql 0.9.2 → 0.9.3

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.
Files changed (21) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -0
  3. data/classpath/embulk-input-jdbc-0.9.3.jar +0 -0
  4. data/classpath/{embulk-input-mysql-0.9.2.jar → embulk-input-mysql-0.9.3.jar} +0 -0
  5. data/src/test/java/org/embulk/input/mysql/IncrementalTest.java +40 -0
  6. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/config_1.yml +14 -0
  7. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/config_2.yml +14 -0
  8. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/expected_1.csv +4 -0
  9. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/expected_1.diff +3 -0
  10. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/expected_2.csv +2 -0
  11. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/expected_2.diff +3 -0
  12. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/insert_more.sql +6 -0
  13. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_config_1.yml +16 -0
  14. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_config_2.yml +17 -0
  15. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_expected_1.csv +4 -0
  16. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_expected_1.diff +3 -0
  17. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_expected_2.csv +2 -0
  18. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_expected_2.diff +3 -0
  19. data/src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/setup.sql +13 -0
  20. metadata +18 -4
  21. data/classpath/embulk-input-jdbc-0.9.2.jar +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 824829fab261292f61d23b9c89555b370fc33979
4
- data.tar.gz: f27720d687df83061d7a1476ed3830c73ea5b7e3
3
+ metadata.gz: 744e51df72489a3bf53272c5df5d459ba838489e
4
+ data.tar.gz: 9df128d4fa0b33718b3db3c6407a184bc3f699b8
5
5
  SHA512:
6
- metadata.gz: 0e6f0ae94f4c5394b7dd6cadc405e4b4d5c92ab753f46df5bab85190527a235ce6eb797cb2bc61de6fd33ccea495dd8341a837eca480f524553d2e90752fc406
7
- data.tar.gz: 3185831da561d5c871aaa6867c7411e630d8abdb7b78355f3d850feb6ac59b748ceee097f17a07c92be47e26940b21cb8ba417ea4f1cd68ed2809f02adc3479a
6
+ metadata.gz: 5951714019851189f8992454620fcbeb8ed070aabf8051f480764a9b39dfbaa8fa73dcd2eb1f4442dab9d6b428363881cce9ca50f67c5ed435ca7ab63a646e38
7
+ data.tar.gz: ca3690c6eed9cff67728fd99e65afe21a57a74e05919a9fb72c8538e7b4de7136777b90a05793d60098d8dbfdeabbb91cefbab712a15ddb86b139f1d06b5aea5
data/README.md CHANGED
@@ -17,6 +17,7 @@ MySQL input plugin for Embulk loads records from MySQL.
17
17
  - **database**: destination database name (string, required)
18
18
  - If you write SQL directly,
19
19
  - **query**: SQL to run (string)
20
+ - **use_raw_query_with_incremental**: If true, you can write optimized query using prepared statement by yourself. See [Use incremental loading with raw query](#use-incremental-loading-with-raw-query) for more detail (boolean, default: false)
20
21
  - If **query** is not set,
21
22
  - **table**: destination table name (string, required)
22
23
  - **select**: expression of select (e.g. `id, created_at`) (string, default: "*")
@@ -92,6 +93,39 @@ Recommended usage is to leave `incremental_columns` unset and let this plugin au
92
93
 
93
94
  - If you get an exception 'The server time zone value XXX is unrecognized ...', please set proper time zone to the MySQL server or set `true` to the `use_legacy_datetime_code` property.
94
95
 
96
+ ### Use incremental loading with raw query
97
+
98
+ **IMPORTANT**: This is an advanced feature and assume you have an enough knowledge about incremental loading using Embulk and this plugin
99
+
100
+ Normally, you can't write your own query for incremental loading.
101
+ `use_raw_query_with_incremental` option allow you to write raw query for incremental loading. It might be well optimized and faster than SQL statement which is automatically generated by plugin.
102
+
103
+ Prepared statement starts with `:` is available instead of fixed value.
104
+ `last_record` value is necessary when you use this option.
105
+ Please use prepared statement that is well distinguishable in SQL statement. Using too simple prepared statement like `:a` might cause SQL parse failure.
106
+
107
+ In the following example, prepared statement `:foo_id` will be replaced with value "1" which is specified in `last_record`.
108
+
109
+ ```yaml
110
+ in:
111
+ type: mysql
112
+ query:
113
+ SELECT
114
+ foo.id as foo_id, bar.name
115
+ FROM
116
+ foo LEFT JOIN bar ON foo.id = bar.id
117
+ WHERE
118
+ foo.hoge IS NOT NULL
119
+ AND foo.id > :foo_id
120
+ ORDER BY
121
+ foo.id ASC
122
+ use_raw_query_with_incremental: true
123
+ incremental_columns:
124
+ - foo_id
125
+ incremental: true
126
+ last_record: [1]
127
+ ```
128
+
95
129
  ## Example
96
130
 
97
131
  ```yaml
@@ -104,4 +104,44 @@ public class IncrementalTest
104
104
  assertThat(readSortedFile(out2), is(readResource("ts/expected_2.csv")));
105
105
  assertThat(result2.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "ts/expected_2.diff")));
106
106
  }
107
+
108
+ @Test
109
+ public void testQueryWithPlaceholder() throws Exception
110
+ {
111
+ // setup first rows
112
+ execute(readResource("query/setup.sql"));
113
+
114
+ Path out1 = embulk.createTempFile("csv");
115
+ RunResult result1 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "query/config_1.yml")), out1);
116
+ assertThat(readSortedFile(out1), is(readResource("query/expected_1.csv")));
117
+ assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "query/expected_1.diff")));
118
+
119
+ // insert more rows
120
+ execute(readResource("query/insert_more.sql"));
121
+
122
+ Path out2 = embulk.createTempFile("csv");
123
+ RunResult result2 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "query/config_2.yml")), out2);
124
+ assertThat(readSortedFile(out2), is(readResource("query/expected_2.csv")));
125
+ assertThat(result2.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "query/expected_2.diff")));
126
+ }
127
+
128
+ @Test
129
+ public void testQueryWithPlaceholderAndMultiColumns() throws Exception
130
+ {
131
+ // setup first rows
132
+ execute(readResource("query/setup.sql"));
133
+
134
+ Path out1 = embulk.createTempFile("csv");
135
+ RunResult result1 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "query/multi_columns_config_1.yml")), out1);
136
+ assertThat(readSortedFile(out1), is(readResource("query/multi_columns_expected_1.csv")));
137
+ assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "query/multi_columns_expected_1.diff")));
138
+
139
+ // insert more rows
140
+ execute(readResource("query/insert_more.sql"));
141
+
142
+ Path out2 = embulk.createTempFile("csv");
143
+ RunResult result2 = embulk.runInput(baseConfig.merge(loadYamlResource(embulk, "query/multi_columns_config_2.yml")), out2);
144
+ assertThat(readSortedFile(out2), is(readResource("query/multi_columns_expected_2.csv")));
145
+ assertThat(result2.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "query/multi_columns_expected_2.diff")));
146
+ }
107
147
  }
@@ -0,0 +1,14 @@
1
+ last_record: [0]
2
+ incremental: true
3
+ incremental_columns: [num]
4
+ use_raw_query_with_incremental: true
5
+ query: |
6
+ SELECT
7
+ num,note
8
+ FROM
9
+ query_load
10
+ WHERE
11
+ num IS NOT NULL
12
+ AND num > :num
13
+ ORDER BY
14
+ num ASC
@@ -0,0 +1,14 @@
1
+ last_record: [4]
2
+ incremental: true
3
+ incremental_columns: [num]
4
+ use_raw_query_with_incremental: true
5
+ query: |
6
+ SELECT
7
+ num,note
8
+ FROM
9
+ query_load
10
+ WHERE
11
+ num IS NOT NULL
12
+ AND num > :num
13
+ ORDER BY
14
+ num ASC
@@ -0,0 +1,6 @@
1
+
2
+ insert into query_load (num, num2, note) values
3
+ (0, 100, 'more_skip'),
4
+ (4, 104, 'more_skip'),
5
+ (9, 109, 'more_load'),
6
+ (5, 105, 'more_load');
@@ -0,0 +1,16 @@
1
+ last_record: [0,0]
2
+ incremental: true
3
+ incremental_columns: [num,num2]
4
+ use_raw_query_with_incremental: true
5
+ query: |
6
+ SELECT
7
+ *
8
+ FROM
9
+ query_load
10
+ WHERE
11
+ num IS NOT NULL
12
+ AND num > :num
13
+ OR (num = :num AND num2 > :num2)
14
+ ORDER BY
15
+ num ASC,
16
+ num2 ASC
@@ -0,0 +1,17 @@
1
+ last_record: [4,104]
2
+ incremental: true
3
+ incremental_columns: [num,num2]
4
+ use_raw_query_with_incremental: true
5
+ query: |
6
+ SELECT
7
+ *
8
+ FROM
9
+ query_load
10
+ WHERE
11
+ num IS NOT NULL
12
+ AND num > :num
13
+ AND num2 IS NOT NULL
14
+ OR (num = :num AND num2 > :num2)
15
+ ORDER BY
16
+ num ASC,
17
+ num2 ASC
@@ -0,0 +1,13 @@
1
+ drop table if exists query_load;
2
+
3
+ create table query_load (
4
+ num int not null,
5
+ num2 int not null,
6
+ note text
7
+ );
8
+
9
+ insert into query_load (num, num2, note) values
10
+ (3, 103, 'first'),
11
+ (4, 104, 'first'),
12
+ (2, 102, 'first'),
13
+ (1, 101, 'first');
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.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-03 00:00:00.000000000 Z
11
+ date: 2018-08-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Selects records from a table.
14
14
  email:
@@ -19,8 +19,8 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - README.md
21
21
  - build.gradle
22
- - classpath/embulk-input-jdbc-0.9.2.jar
23
- - classpath/embulk-input-mysql-0.9.2.jar
22
+ - classpath/embulk-input-jdbc-0.9.3.jar
23
+ - classpath/embulk-input-mysql-0.9.3.jar
24
24
  - default_jdbc_driver/mysql-connector-java-5.1.44.jar
25
25
  - lib/embulk/input/mysql.rb
26
26
  - src/main/java/org/embulk/input/MySQLInputPlugin.java
@@ -79,6 +79,20 @@ files:
79
79
  - src/test/resources/org/embulk/input/mysql/test/expect/incremental/int/expected_2.diff
80
80
  - src/test/resources/org/embulk/input/mysql/test/expect/incremental/int/insert_more.sql
81
81
  - src/test/resources/org/embulk/input/mysql/test/expect/incremental/int/setup.sql
82
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/config_1.yml
83
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/config_2.yml
84
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/expected_1.csv
85
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/expected_1.diff
86
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/expected_2.csv
87
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/expected_2.diff
88
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/insert_more.sql
89
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_config_1.yml
90
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_config_2.yml
91
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_expected_1.csv
92
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_expected_1.diff
93
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_expected_2.csv
94
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/multi_columns_expected_2.diff
95
+ - src/test/resources/org/embulk/input/mysql/test/expect/incremental/query/setup.sql
82
96
  - src/test/resources/org/embulk/input/mysql/test/expect/incremental/ts/config_1.yml
83
97
  - src/test/resources/org/embulk/input/mysql/test/expect/incremental/ts/config_2.yml
84
98
  - src/test/resources/org/embulk/input/mysql/test/expect/incremental/ts/expected_1.csv