embulk-output-td 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/build.gradle +9 -8
  4. data/embulk-output-td.gemspec +1 -1
  5. data/src/main/java/org/embulk/output/td/MsgpackGZFileBuilder.java +11 -12
  6. data/src/main/java/org/embulk/output/td/RecordWriter.java +4 -7
  7. data/src/main/java/org/embulk/output/td/TdOutputPlugin.java +89 -84
  8. data/src/main/java/org/embulk/output/td/writer/FieldWriterSet.java +9 -0
  9. data/src/main/java/org/embulk/output/td/writer/JsonFieldWriter.java +23 -0
  10. data/src/test/java/org/embulk/output/td/TestRecordWriter.java +37 -38
  11. data/src/test/java/org/embulk/output/td/TestTdOutputPlugin.java +53 -49
  12. metadata +9 -30
  13. data/src/main/java/com/treasuredata/api/TdApiClient.java +0 -506
  14. data/src/main/java/com/treasuredata/api/TdApiClientConfig.java +0 -79
  15. data/src/main/java/com/treasuredata/api/TdApiConflictException.java +0 -10
  16. data/src/main/java/com/treasuredata/api/TdApiConstants.java +0 -10
  17. data/src/main/java/com/treasuredata/api/TdApiException.java +0 -20
  18. data/src/main/java/com/treasuredata/api/TdApiExecutionException.java +0 -10
  19. data/src/main/java/com/treasuredata/api/TdApiExecutionInterruptedException.java +0 -16
  20. data/src/main/java/com/treasuredata/api/TdApiExecutionTimeoutException.java +0 -18
  21. data/src/main/java/com/treasuredata/api/TdApiNotFoundException.java +0 -10
  22. data/src/main/java/com/treasuredata/api/TdApiResponseException.java +0 -32
  23. data/src/main/java/com/treasuredata/api/model/TDArrayColumnType.java +0 -80
  24. data/src/main/java/com/treasuredata/api/model/TDBulkImportSession.java +0 -157
  25. data/src/main/java/com/treasuredata/api/model/TDColumn.java +0 -129
  26. data/src/main/java/com/treasuredata/api/model/TDColumnType.java +0 -23
  27. data/src/main/java/com/treasuredata/api/model/TDColumnTypeDeserializer.java +0 -128
  28. data/src/main/java/com/treasuredata/api/model/TDDatabase.java +0 -49
  29. data/src/main/java/com/treasuredata/api/model/TDDatabaseList.java +0 -24
  30. data/src/main/java/com/treasuredata/api/model/TDMapColumnType.java +0 -88
  31. data/src/main/java/com/treasuredata/api/model/TDPrimitiveColumnType.java +0 -61
  32. data/src/main/java/com/treasuredata/api/model/TDTable.java +0 -64
  33. data/src/main/java/com/treasuredata/api/model/TDTableList.java +0 -33
  34. data/src/main/java/com/treasuredata/api/model/TDTablePermission.java +0 -50
  35. data/src/main/java/com/treasuredata/api/model/TDTableSchema.java +0 -44
  36. data/src/main/java/com/treasuredata/api/model/TDTableType.java +0 -37
  37. data/src/test/java/com/treasuredata/api/TestTdApiClient.java +0 -79
@@ -1,129 +0,0 @@
1
- package com.treasuredata.api.model;
2
-
3
- import com.fasterxml.jackson.annotation.JsonCreator;
4
- import com.fasterxml.jackson.annotation.JsonValue;
5
- import com.fasterxml.jackson.databind.RuntimeJsonMappingException;
6
- import com.google.common.base.Objects;
7
- import com.google.common.base.Strings;
8
- import com.google.common.collect.Lists;
9
- import org.json.simple.JSONArray;
10
- import org.json.simple.parser.JSONParser;
11
- import org.json.simple.parser.ParseException;
12
-
13
- import java.util.ArrayList;
14
- import java.util.List;
15
-
16
- public class TDColumn
17
- {
18
- private String name;
19
- private TDColumnType type;
20
- private byte[] key;
21
-
22
- public TDColumn(String name, TDColumnType type, byte[] key)
23
- {
24
- this.name = name;
25
- this.type = type;
26
- this.key = key;
27
- }
28
-
29
- public String getName()
30
- {
31
- return name;
32
- }
33
-
34
- public TDColumnType getType()
35
- {
36
- return type;
37
- }
38
-
39
- public byte[] getKey()
40
- {
41
- return key;
42
- }
43
-
44
- private static JSONArray castToArray(Object obj)
45
- {
46
- if (obj instanceof JSONArray) {
47
- return (JSONArray) obj;
48
- }
49
- else {
50
- throw new RuntimeJsonMappingException("Not an json array: " + obj);
51
- }
52
- }
53
-
54
- public static List<TDColumn> parseTuple(String jsonStr)
55
- {
56
- if (Strings.isNullOrEmpty(jsonStr)) {
57
- return new ArrayList<>(0);
58
- }
59
-
60
- // unescape json quotation
61
- try {
62
- String unescaped = jsonStr.replaceAll("\\\"", "\"");
63
- JSONArray arr = castToArray(new JSONParser().parse(unescaped));
64
- List<TDColumn> columnList = new ArrayList<>(arr.size());
65
- for (Object e : arr) {
66
- JSONArray columnNameAndType = castToArray(e);
67
- String[] s = new String[columnNameAndType.size()];
68
- for (int i = 0; i < columnNameAndType.size(); ++i) {
69
- s[i] = columnNameAndType.get(i).toString();
70
- }
71
- columnList.add(parseTuple(s));
72
- }
73
- return columnList;
74
- }
75
- catch (ParseException e) {
76
- return new ArrayList<>(0);
77
- }
78
- }
79
-
80
- @JsonCreator
81
- public static TDColumn parseTuple(String[] tuple)
82
- {
83
- // TODO encode key in some ways
84
- if (tuple != null && tuple.length == 2) {
85
- return new TDColumn(
86
- tuple[0],
87
- TDColumnTypeDeserializer.parseColumnType(tuple[1]),
88
- tuple[0].getBytes());
89
-
90
- }
91
- else if (tuple != null && tuple.length == 3) {
92
- return new TDColumn(
93
- tuple[0],
94
- TDColumnTypeDeserializer.parseColumnType(tuple[1]),
95
- tuple[2].getBytes());
96
-
97
- }
98
- else {
99
- throw new RuntimeJsonMappingException("Unexpected string tuple to deserialize TDColumn");
100
- }
101
- }
102
-
103
- @JsonValue
104
- public String[] getTuple()
105
- {
106
- return new String[] { name, type.toString(), new String(key) };
107
- }
108
-
109
- @Override
110
- public boolean equals(Object obj)
111
- {
112
- if (this == obj) {
113
- return true;
114
- }
115
- if (obj == null || getClass() != obj.getClass()) {
116
- return false;
117
- }
118
- TDColumn other = (TDColumn) obj;
119
- return Objects.equal(this.name, other.name) &&
120
- Objects.equal(type, other.type) &&
121
- Objects.equal(key, other.key);
122
- }
123
-
124
- @Override
125
- public int hashCode()
126
- {
127
- return Objects.hashCode(name, type, key);
128
- }
129
- }
@@ -1,23 +0,0 @@
1
- package com.treasuredata.api.model;
2
-
3
- import com.fasterxml.jackson.annotation.JsonValue;
4
- import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
5
-
6
- @JsonDeserialize(using = TDColumnTypeDeserializer.class)
7
- public interface TDColumnType
8
- {
9
- public boolean isPrimitive();
10
-
11
- public boolean isArrayType();
12
-
13
- public boolean isMapType();
14
-
15
- public TDPrimitiveColumnType asPrimitiveType();
16
-
17
- public TDArrayColumnType asArrayType();
18
-
19
- public TDMapColumnType asMapType();
20
-
21
- @JsonValue
22
- public String toString();
23
- }
@@ -1,128 +0,0 @@
1
- package com.treasuredata.api.model;
2
-
3
- import com.fasterxml.jackson.core.JsonParser;
4
- import com.fasterxml.jackson.core.JsonProcessingException;
5
- import com.fasterxml.jackson.core.JsonToken;
6
- import com.fasterxml.jackson.databind.DeserializationContext;
7
- import com.fasterxml.jackson.databind.JsonDeserializer;
8
- import com.fasterxml.jackson.databind.RuntimeJsonMappingException;
9
-
10
- import java.io.IOException;
11
-
12
- public class TDColumnTypeDeserializer
13
- extends JsonDeserializer<TDColumnType>
14
- {
15
- @Override
16
- public TDColumnType deserialize(JsonParser jp, DeserializationContext ctxt)
17
- throws IOException, JsonProcessingException
18
- {
19
- if (jp.nextToken() != JsonToken.VALUE_STRING) {
20
- //throw new JsonMappingException("Unexpected JSON element to deserialize TDColumnType");
21
- throw new RuntimeJsonMappingException("Unexpected JSON element to deserialize TDColumnType");
22
- }
23
- String str = jp.getText();
24
- return parseColumnType(str);
25
- }
26
-
27
- public static TDColumnType parseColumnType(String str)
28
- {
29
- Parser p = new Parser(str);
30
- TDColumnType type = parseColumnTypeRecursive(p);
31
- if (!p.eof()) {
32
- throw new IllegalArgumentException("Cannot parse type: EOF expected: " + str);
33
- }
34
- return type;
35
- }
36
-
37
- private static TDColumnType parseColumnTypeRecursive(Parser p)
38
- {
39
- if (p.scan("string")) {
40
- return TDPrimitiveColumnType.STRING;
41
-
42
- }
43
- else if (p.scan("int")) {
44
- return TDPrimitiveColumnType.INT;
45
-
46
- }
47
- else if (p.scan("long")) {
48
- return TDPrimitiveColumnType.LONG;
49
-
50
- }
51
- else if (p.scan("double")) {
52
- return TDPrimitiveColumnType.DOUBLE;
53
-
54
- }
55
- else if (p.scan("float")) {
56
- return TDPrimitiveColumnType.FLOAT;
57
-
58
- }
59
- else if (p.scan("array")) {
60
- if (!p.scan("<")) {
61
- throw new IllegalArgumentException("Cannot parse type: expected '<' for array type: " + p.getString());
62
- }
63
- TDColumnType elementType = parseColumnTypeRecursive(p);
64
- if (!p.scan(">")) {
65
- throw new IllegalArgumentException("Cannot parse type: expected '>' for array type: " + p.getString());
66
- }
67
- return new TDArrayColumnType(elementType);
68
-
69
- }
70
- else if (p.scan("map")) {
71
- if (!p.scan("<")) {
72
- throw new IllegalArgumentException("Cannot parse type: expected '<' for map type: " + p.getString());
73
- }
74
- TDColumnType keyType = parseColumnTypeRecursive(p);
75
- if (!p.scan(",")) {
76
- throw new IllegalArgumentException("Cannot parse type: expected ',' for map type: " + p.getString());
77
- }
78
- TDColumnType valueType = parseColumnTypeRecursive(p);
79
- if (!p.scan(">")) {
80
- throw new IllegalArgumentException("Cannot parse type: expected '>' for map type: " + p.getString());
81
- }
82
- return new TDMapColumnType(keyType, valueType);
83
-
84
- }
85
- else {
86
- throw new IllegalArgumentException("Cannot parse type: " + p.getString());
87
- }
88
- }
89
-
90
- private static class Parser
91
- {
92
- private final String string;
93
- private int offset;
94
-
95
- public Parser(String string)
96
- {
97
- this.string = string;
98
- }
99
-
100
- public String getString()
101
- {
102
- return string;
103
- }
104
-
105
- public boolean scan(String s)
106
- {
107
- skipSpaces();
108
- if (string.startsWith(s, offset)) {
109
- offset += s.length();
110
- return true;
111
- }
112
- return false;
113
- }
114
-
115
- public boolean eof()
116
- {
117
- skipSpaces();
118
- return string.length() <= offset;
119
- }
120
-
121
- private void skipSpaces()
122
- {
123
- while (string.startsWith(" ", offset)) {
124
- offset++;
125
- }
126
- }
127
- }
128
- }
@@ -1,49 +0,0 @@
1
- package com.treasuredata.api.model;
2
-
3
- import com.fasterxml.jackson.annotation.JsonCreator;
4
- import com.fasterxml.jackson.annotation.JsonProperty;
5
- import com.google.common.base.Objects;
6
-
7
- public class TDDatabase
8
- {
9
- private String name;
10
- // "permission" field is also available but not necessary yet
11
-
12
- @JsonCreator
13
- public TDDatabase(
14
- @JsonProperty("name") String name)
15
- {
16
- this.name = name;
17
- }
18
-
19
- @JsonProperty
20
- public String getName()
21
- {
22
- return name;
23
- }
24
-
25
- public boolean isWritable()
26
- {
27
- // TODO not implemented yet
28
- return true;
29
- }
30
-
31
- @Override
32
- public boolean equals(Object obj)
33
- {
34
- if (this == obj) {
35
- return true;
36
- }
37
- if (obj == null || getClass() != obj.getClass()) {
38
- return false;
39
- }
40
- TDDatabase other = (TDDatabase) obj;
41
- return Objects.equal(this.name, other.name);
42
- }
43
-
44
- @Override
45
- public int hashCode()
46
- {
47
- return Objects.hashCode(name);
48
- }
49
- }
@@ -1,24 +0,0 @@
1
- package com.treasuredata.api.model;
2
-
3
- import com.fasterxml.jackson.annotation.JsonCreator;
4
- import com.fasterxml.jackson.annotation.JsonProperty;
5
-
6
- import java.util.List;
7
-
8
- public class TDDatabaseList
9
- {
10
- private List<TDDatabase> databases;
11
-
12
- @JsonCreator
13
- public TDDatabaseList(
14
- @JsonProperty("databases") List<TDDatabase> databases)
15
- {
16
- this.databases = databases;
17
- }
18
-
19
- @JsonProperty
20
- public List<TDDatabase> getDatabases()
21
- {
22
- return databases;
23
- }
24
- }
@@ -1,88 +0,0 @@
1
- package com.treasuredata.api.model;
2
-
3
- import com.google.common.base.Objects;
4
-
5
- public class TDMapColumnType
6
- implements TDColumnType
7
- {
8
- private TDColumnType keyType;
9
- private TDColumnType valueType;
10
-
11
- public TDMapColumnType(TDColumnType keyType, TDColumnType valueType)
12
- {
13
- this.keyType = keyType;
14
- this.valueType = valueType;
15
- }
16
-
17
- public TDColumnType getKeyType()
18
- {
19
- return keyType;
20
- }
21
-
22
- public TDColumnType getValueType()
23
- {
24
- return valueType;
25
- }
26
-
27
- @Override
28
- public String toString()
29
- {
30
- return "map<" + keyType + "," + valueType + ">";
31
- }
32
-
33
- @Override
34
- public boolean isPrimitive()
35
- {
36
- return false;
37
- }
38
-
39
- @Override
40
- public boolean isArrayType()
41
- {
42
- return false;
43
- }
44
-
45
- @Override
46
- public boolean isMapType()
47
- {
48
- return true;
49
- }
50
-
51
- @Override
52
- public TDPrimitiveColumnType asPrimitiveType()
53
- {
54
- return null;
55
- }
56
-
57
- @Override
58
- public TDArrayColumnType asArrayType()
59
- {
60
- return null;
61
- }
62
-
63
- @Override
64
- public TDMapColumnType asMapType()
65
- {
66
- return this;
67
- }
68
-
69
- @Override
70
- public boolean equals(Object obj)
71
- {
72
- if (this == obj) {
73
- return true;
74
- }
75
- if (obj == null || getClass() != obj.getClass()) {
76
- return false;
77
- }
78
- TDMapColumnType other = (TDMapColumnType) obj;
79
- return Objects.equal(this.keyType, other.keyType) &&
80
- Objects.equal(this.valueType, other.valueType);
81
- }
82
-
83
- @Override
84
- public int hashCode()
85
- {
86
- return Objects.hashCode(keyType, valueType);
87
- }
88
- }