embulk-output-td 0.1.7 → 0.1.8
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/build.gradle +1 -1
- data/embulk-output-td.gemspec +1 -1
- data/src/main/java/org/embulk/output/td/TdOutputPlugin.java +3 -14
- data/src/main/java/org/embulk/output/td/TimeValueConfig.java +35 -0
- data/src/main/java/org/embulk/output/td/TimeValueGenerator.java +79 -0
- data/src/main/java/org/embulk/output/td/writer/FieldWriterSet.java +3 -27
- data/src/test/java/org/embulk/output/td/TestTimeValueGenerator.java +125 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7926b5de5fab7cc6f9343b39e0c5d35f8e2e160e
|
4
|
+
data.tar.gz: 1f581633d6365c1043fef772f856c79e1b29397e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 668eec6a9224c66c7bc0d750af02a8d8a577a584482fa44599722a0478d517ef09b80b214a6821eefee32ebd65ee0dc38d164fb0cd7b3dc13df208d85872aff8
|
7
|
+
data.tar.gz: 94a707125cc4631a6cf71fe4af3a720370cf667374d7eb6e8772a7d478b38b1affea2d44244a91dcef9fb0c47ffb7d0ee67751ce392b622de40dd66e2a1a3d63
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.1.8 - 2016-01-09
|
2
|
+
|
3
|
+
* [new feature] Add mode to time value option [#31](https://github.com/treasure-data/embulk-output-td/pull/31)
|
4
|
+
* [maintenance] Remove unnecessary warning messages within showErrorRecord method [#30](https://github.com/treasure-data/embulk-output-td/pull/30)
|
5
|
+
|
1
6
|
## 0.1.7 - 2016-01-07
|
2
7
|
|
3
8
|
* [new feature] Add time_value option [#16](https://github.com/treasure-data/embulk-output-td/pull/16)
|
data/build.gradle
CHANGED
data/embulk-output-td.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
Gem::Specification.new do |spec|
|
3
3
|
spec.name = "embulk-output-td"
|
4
|
-
spec.version = "0.1.
|
4
|
+
spec.version = "0.1.8"
|
5
5
|
spec.authors = ["Muga Nishizawa"]
|
6
6
|
spec.summary = %[TreasureData output plugin for Embulk]
|
7
7
|
spec.description = %[TreasureData output plugin is an Embulk plugin that loads records to TreasureData read by any input plugins. Search the input plugins by 'embulk-output' keyword.]
|
@@ -213,19 +213,6 @@ public class TdOutputPlugin
|
|
213
213
|
public boolean getUseSsl();
|
214
214
|
}
|
215
215
|
|
216
|
-
public interface TimeValueConfig
|
217
|
-
extends Task
|
218
|
-
{
|
219
|
-
@Config("from")
|
220
|
-
@Min(0)
|
221
|
-
public long getFrom();
|
222
|
-
|
223
|
-
@Config("to")
|
224
|
-
@ConfigDefault("0")
|
225
|
-
@Min(0)
|
226
|
-
public long getTo();
|
227
|
-
}
|
228
|
-
|
229
216
|
public static enum ConvertTimestampType
|
230
217
|
{
|
231
218
|
STRING(-1),
|
@@ -606,7 +593,9 @@ public class TdOutputPlugin
|
|
606
593
|
log.info(" - {}: {}", pair.getKey(), pair.getValue());
|
607
594
|
}
|
608
595
|
|
609
|
-
|
596
|
+
if (session.getErrorRecords() > 0L) {
|
597
|
+
showBulkImportErrorRecords(client, sessionName, (int) Math.min(session.getErrorRecords(), task.getDisplayedErrorRecordsCountLimit()));
|
598
|
+
}
|
610
599
|
|
611
600
|
if (session.getErrorRecords() > 0 && task.getStopOnInvalidRecord()) {
|
612
601
|
throw new DataException(String.format("Stop committing because the perform job skipped %d error records", session.getErrorRecords()));
|
@@ -0,0 +1,35 @@
|
|
1
|
+
package org.embulk.output.td;
|
2
|
+
|
3
|
+
import com.google.common.base.Optional;
|
4
|
+
import org.embulk.config.Config;
|
5
|
+
import org.embulk.config.ConfigDefault;
|
6
|
+
import org.embulk.config.Task;
|
7
|
+
|
8
|
+
import javax.validation.constraints.Max;
|
9
|
+
import javax.validation.constraints.Min;
|
10
|
+
|
11
|
+
public interface TimeValueConfig
|
12
|
+
extends Task
|
13
|
+
{
|
14
|
+
@Config("mode")
|
15
|
+
@ConfigDefault("\"incremental_time\"")
|
16
|
+
String getMode();
|
17
|
+
|
18
|
+
@Config("value")
|
19
|
+
@ConfigDefault("null")
|
20
|
+
@Min(0)
|
21
|
+
@Max(253402300799L) // '9999-12-31 23:59:59 UTC'
|
22
|
+
Optional<Long> getValue();
|
23
|
+
|
24
|
+
@Config("from")
|
25
|
+
@ConfigDefault("null")
|
26
|
+
@Min(0)
|
27
|
+
@Max(253402300799L) // '9999-12-31 23:59:59 UTC'
|
28
|
+
Optional<Long> getFrom();
|
29
|
+
|
30
|
+
@Config("to")
|
31
|
+
@ConfigDefault("null")
|
32
|
+
@Min(0)
|
33
|
+
@Max(253402300799L) // '9999-12-31 23:59:59 UTC'
|
34
|
+
Optional<Long> getTo();
|
35
|
+
}
|
@@ -0,0 +1,79 @@
|
|
1
|
+
package org.embulk.output.td;
|
2
|
+
|
3
|
+
import com.google.common.base.Optional;
|
4
|
+
import org.embulk.config.ConfigException;
|
5
|
+
|
6
|
+
public abstract class TimeValueGenerator
|
7
|
+
{
|
8
|
+
public abstract long next();
|
9
|
+
|
10
|
+
public static TimeValueGenerator newGenerator(final TimeValueConfig config)
|
11
|
+
{
|
12
|
+
switch (config.getMode()) {
|
13
|
+
case "incremental_time": { // default mode
|
14
|
+
require(config.getFrom(), "'from', 'to'");
|
15
|
+
require(config.getTo(), "'to'");
|
16
|
+
reject(config.getValue(), "'value'");
|
17
|
+
|
18
|
+
return new TimeValueGenerator()
|
19
|
+
{
|
20
|
+
private final long from = config.getFrom().get();
|
21
|
+
private final long to = config.getTo().get();
|
22
|
+
|
23
|
+
private long current = from;
|
24
|
+
|
25
|
+
@Override
|
26
|
+
public long next()
|
27
|
+
{
|
28
|
+
try {
|
29
|
+
return current++;
|
30
|
+
}
|
31
|
+
finally {
|
32
|
+
if (current > to) {
|
33
|
+
current = from;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
};
|
38
|
+
}
|
39
|
+
case "fixed_time": {
|
40
|
+
require(config.getValue(), "'value'");
|
41
|
+
reject(config.getFrom(), "'from'");
|
42
|
+
reject(config.getTo(), "'to'");
|
43
|
+
|
44
|
+
return new TimeValueGenerator()
|
45
|
+
{
|
46
|
+
private final long fixed = config.getValue().get();
|
47
|
+
|
48
|
+
@Override
|
49
|
+
public long next()
|
50
|
+
{
|
51
|
+
return fixed;
|
52
|
+
}
|
53
|
+
};
|
54
|
+
}
|
55
|
+
default: {
|
56
|
+
throw new ConfigException(String.format("Unknwon mode '%s'. Supported methods are incremental_time, fixed_time.", config.getMode()));
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
// ported from embulk-input-s3
|
62
|
+
private static <T> T require(Optional<T> value, String message)
|
63
|
+
{
|
64
|
+
if (value.isPresent()) {
|
65
|
+
return value.get();
|
66
|
+
}
|
67
|
+
else {
|
68
|
+
throw new ConfigException("Required option is not set: " + message);
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
// ported from embulk-input-s3
|
73
|
+
private static <T> void reject(Optional<T> value, String message)
|
74
|
+
{
|
75
|
+
if (value.isPresent()) {
|
76
|
+
throw new ConfigException("Invalid option is set: " + message);
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
@@ -7,6 +7,8 @@ import com.google.common.base.Optional;
|
|
7
7
|
import com.google.common.base.Throwables;
|
8
8
|
import org.embulk.config.ConfigException;
|
9
9
|
import org.embulk.output.td.TdOutputPlugin;
|
10
|
+
import org.embulk.output.td.TimeValueConfig;
|
11
|
+
import org.embulk.output.td.TimeValueGenerator;
|
10
12
|
import org.embulk.spi.Column;
|
11
13
|
import org.embulk.spi.ColumnVisitor;
|
12
14
|
import org.embulk.spi.PageReader;
|
@@ -20,7 +22,6 @@ import org.embulk.spi.type.TimestampType;
|
|
20
22
|
import org.embulk.spi.type.Type;
|
21
23
|
import org.embulk.spi.util.Timestamps;
|
22
24
|
import org.embulk.output.td.MsgpackGZFileBuilder;
|
23
|
-
import org.embulk.output.td.TdOutputPlugin.TimeValueConfig;
|
24
25
|
import org.slf4j.Logger;
|
25
26
|
|
26
27
|
public class FieldWriterSet
|
@@ -220,7 +221,7 @@ public class FieldWriterSet
|
|
220
221
|
}
|
221
222
|
|
222
223
|
if (timeValueConfig.isPresent()) {
|
223
|
-
staticTimeValue = Optional.of(
|
224
|
+
staticTimeValue = Optional.of(TimeValueGenerator.newGenerator(timeValueConfig.get()));
|
224
225
|
}
|
225
226
|
else {
|
226
227
|
staticTimeValue = Optional.absent();
|
@@ -321,29 +322,4 @@ public class FieldWriterSet
|
|
321
322
|
throw Throwables.propagate(e);
|
322
323
|
}
|
323
324
|
}
|
324
|
-
|
325
|
-
static class TimeValueGenerator
|
326
|
-
{
|
327
|
-
private final long from;
|
328
|
-
private final long to;
|
329
|
-
private long current;
|
330
|
-
|
331
|
-
TimeValueGenerator(TimeValueConfig config)
|
332
|
-
{
|
333
|
-
current = from = config.getFrom();
|
334
|
-
to = config.getTo();
|
335
|
-
}
|
336
|
-
|
337
|
-
long next()
|
338
|
-
{
|
339
|
-
try {
|
340
|
-
return current++;
|
341
|
-
}
|
342
|
-
finally {
|
343
|
-
if (current >= to) {
|
344
|
-
current = from;
|
345
|
-
}
|
346
|
-
}
|
347
|
-
}
|
348
|
-
}
|
349
325
|
}
|
@@ -0,0 +1,125 @@
|
|
1
|
+
package org.embulk.output.td;
|
2
|
+
|
3
|
+
import com.google.common.collect.ImmutableMap;
|
4
|
+
import org.embulk.EmbulkTestRuntime;
|
5
|
+
import org.embulk.config.ConfigException;
|
6
|
+
import org.embulk.config.ConfigSource;
|
7
|
+
import org.embulk.output.td.writer.FieldWriterSet;
|
8
|
+
import org.embulk.spi.Exec;
|
9
|
+
import org.embulk.spi.Schema;
|
10
|
+
import org.embulk.spi.type.Types;
|
11
|
+
import org.junit.Before;
|
12
|
+
import org.junit.Rule;
|
13
|
+
import org.junit.Test;
|
14
|
+
import org.slf4j.Logger;
|
15
|
+
|
16
|
+
import static org.embulk.output.td.TestTdOutputPlugin.config;
|
17
|
+
import static org.embulk.output.td.TestTdOutputPlugin.pluginTask;
|
18
|
+
import static org.embulk.output.td.TestTdOutputPlugin.schema;
|
19
|
+
import static org.junit.Assert.assertTrue;
|
20
|
+
import static org.junit.Assert.fail;
|
21
|
+
|
22
|
+
public class TestTimeValueGenerator
|
23
|
+
{
|
24
|
+
@Rule
|
25
|
+
public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
|
26
|
+
|
27
|
+
private Logger log;
|
28
|
+
private ConfigSource config;
|
29
|
+
private Schema schema;
|
30
|
+
|
31
|
+
@Before
|
32
|
+
public void createResources()
|
33
|
+
{
|
34
|
+
log = Exec.getLogger(TestTimeValueGenerator.class);
|
35
|
+
config = config();
|
36
|
+
}
|
37
|
+
|
38
|
+
@Test
|
39
|
+
public void validateTimeValue()
|
40
|
+
{
|
41
|
+
// incremental_time
|
42
|
+
{ // {from: 0, to: 0} # default incremental_time
|
43
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
44
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("from", 0L, "to", 0L))), schema);
|
45
|
+
}
|
46
|
+
{ // {from: 0} # default incremental_time
|
47
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
48
|
+
try {
|
49
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("from", 0L))), schema);
|
50
|
+
fail();
|
51
|
+
}
|
52
|
+
catch (Throwable t) {
|
53
|
+
assertTrue(t instanceof ConfigException);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
{ // {to: 0} # default incremental_time
|
57
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
58
|
+
try {
|
59
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("to", 0L))), schema);
|
60
|
+
fail();
|
61
|
+
}
|
62
|
+
catch (Throwable t) {
|
63
|
+
assertTrue(t instanceof ConfigException);
|
64
|
+
}
|
65
|
+
}
|
66
|
+
{ // {from: 0, to: 0, mode: incremental_time}
|
67
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
68
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("from", 0L, "to", 0L, "mode", "incremental_time"))), schema);
|
69
|
+
}
|
70
|
+
{ // {from: 0, mode: incremental_time}
|
71
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
72
|
+
try {
|
73
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("from", 0L, "mode", "incremental_time"))), schema);
|
74
|
+
fail();
|
75
|
+
}
|
76
|
+
catch (Throwable t) {
|
77
|
+
assertTrue(t instanceof ConfigException);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
{ // {to: 0, mode: incremental_time}
|
81
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
82
|
+
try {
|
83
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("to", 0L, "mode", "incremental_time"))), schema);
|
84
|
+
fail();
|
85
|
+
}
|
86
|
+
catch (Throwable t) {
|
87
|
+
assertTrue(t instanceof ConfigException);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
{ // {mode: incremental_time}
|
91
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
92
|
+
try {
|
93
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("mode", "incremental_time"))), schema);
|
94
|
+
fail();
|
95
|
+
}
|
96
|
+
catch (Throwable t) {
|
97
|
+
assertTrue(t instanceof ConfigException);
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
// fixed_time
|
102
|
+
{ // {value: 0, mode: fixed_time}
|
103
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
104
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("value", 0L, "mode", "fixed_time"))), schema);
|
105
|
+
}
|
106
|
+
{ // {mode: fixed_time}
|
107
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
108
|
+
try {
|
109
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("mode", "fixed_time"))), schema);
|
110
|
+
}
|
111
|
+
catch (Throwable t) {
|
112
|
+
assertTrue(t instanceof ConfigException);
|
113
|
+
}
|
114
|
+
}
|
115
|
+
{ // {value: 0}
|
116
|
+
schema = schema("_c0", Types.STRING, "_c1", Types.LONG);
|
117
|
+
try {
|
118
|
+
new FieldWriterSet(log, pluginTask(config.set("time_value", ImmutableMap.of("value", 0L))), schema);
|
119
|
+
}
|
120
|
+
catch (Throwable t) {
|
121
|
+
assertTrue(t instanceof ConfigException);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-output-td
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Muga Nishizawa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,6 +87,8 @@ files:
|
|
87
87
|
- src/main/java/org/embulk/output/td/MsgpackGZFileBuilder.java
|
88
88
|
- src/main/java/org/embulk/output/td/RecordWriter.java
|
89
89
|
- src/main/java/org/embulk/output/td/TdOutputPlugin.java
|
90
|
+
- src/main/java/org/embulk/output/td/TimeValueConfig.java
|
91
|
+
- src/main/java/org/embulk/output/td/TimeValueGenerator.java
|
90
92
|
- src/main/java/org/embulk/output/td/writer/BooleanFieldWriter.java
|
91
93
|
- src/main/java/org/embulk/output/td/writer/DoubleFieldWriter.java
|
92
94
|
- src/main/java/org/embulk/output/td/writer/FieldWriter.java
|
@@ -102,8 +104,9 @@ files:
|
|
102
104
|
- src/test/java/com/treasuredata/api/TestTdApiClient.java
|
103
105
|
- src/test/java/org/embulk/output/td/TestRecordWriter.java
|
104
106
|
- src/test/java/org/embulk/output/td/TestTdOutputPlugin.java
|
107
|
+
- src/test/java/org/embulk/output/td/TestTimeValueGenerator.java
|
105
108
|
- src/test/java/org/embulk/output/td/writer/TestFieldWriterSet.java
|
106
|
-
- classpath/embulk-output-td-0.1.
|
109
|
+
- classpath/embulk-output-td-0.1.8.jar
|
107
110
|
- classpath/javassist-3.18.1-GA.jar
|
108
111
|
- classpath/jetty-client-9.2.2.v20140723.jar
|
109
112
|
- classpath/jetty-http-9.2.2.v20140723.jar
|