embulk-input-athena 0.1.2 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7deb74a8401b375ad2a48e2e0400d34334e0984f
4
- data.tar.gz: ab085cbbd9db5902183e979df7fd88a5111696db
3
+ metadata.gz: d0bfb1c9d3ca30be4dce909eb2506f57a82f1999
4
+ data.tar.gz: 6dc9ba9cc468b447d50cbe67402a75a0eb9348bf
5
5
  SHA512:
6
- metadata.gz: 1c048ae148d4c2758986a1705776537646e423b32f26e7c0c07f4de6568403b43108f627e7c530961983a9492d974c6cb2e1d4048d4470c99c20fcdc6f25e592
7
- data.tar.gz: a2f42184c6ac26cc0e9f8d253de0ef7071c017aa45e6654524b5cd0f1c69b020c7ceed3a8685f1cfb868e68ec07bd8af29988c9b7cfb86411bc116105c9c2640
6
+ metadata.gz: 19f71b35de22b9a46838ac7e91b804383f41923a3ab0ef58fc8198aacf267e9288b68577c767cb2fa442c5cf0672f17541f123f7c4a7c9ef6482878d9e51f985
7
+ data.tar.gz: 11d62ec863d623ab40d5b10fb1e7d1ebcf8fbccc8dcb7a06f7296ee1d5a405dd6446594a8e9274b242adf2c1b290f5671c1d2a27678c1251bea9fda319ef65ab
data/Dockerfile CHANGED
@@ -1,8 +1,6 @@
1
1
  FROM openjdk:8-jdk
2
2
 
3
- # ENV EMBULK_VERSION 0.9.3
4
- ENV EMBULK_VERSION 0.8.39
3
+ ENV EMBULK_VERSION 0.9.23
5
4
 
6
- RUN curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.bintray.com/embulk/maven/embulk-${EMBULK_VERSION}.jar" &&\
7
- chmod +x ~/.embulk/bin/embulk &&\
8
- echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
5
+ RUN curl --create-dirs -o /usr/local/bin/embulk -L "https://dl.embulk.org/embulk-${EMBULK_VERSION}.jar" &&\
6
+ chmod +x /usr/local/bin/embulk
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Athena input plugin for Embulk
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/embulk-input-athena.svg)](https://badge.fury.io/rb/embulk-input-athena)
4
+ [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)
5
+
3
6
  Athena input plugin for Embulk loads records from Athena(AWS).
4
7
 
5
8
  ## Overview
@@ -11,15 +14,16 @@ Athena input plugin for Embulk loads records from Athena(AWS).
11
14
 
12
15
  ## Configuration
13
16
 
14
- * **driver_path**: path to the jar file of the Athena JDBC driver. If not set, the bundled JDBC driver(AthenaJDBC41-1.1.0.jar) will be used. (string)
15
- * **database**: description (string, required)
16
- * **athena_url**: description (string, required)
17
+ * **driver_path**: path to the jar file of the Athena JDBC driver. If not set, the bundled JDBC driver(AthenaJDBC41.jar) will be used. (string)
18
+ * **database**: database name (string, required)
19
+ * **athena_url**: Athena url (string, required)
17
20
  * **s3_staging_dir**: The S3 location to which your query output is written, for example s3://query-results-bucket/folder/. (string, required)
18
- * **access_key**: description (string, required)
19
- * **secret_key**: description (string, required)
20
- * **query**: description (string, required)
21
- * **columns**: description (string, required)
22
- * **options**: description (string, default: {})
21
+ * **access_key**: AWS access key (string, required)
22
+ * **secret_key**: AWS secret key (string, required)
23
+ * **query**: SQL to run (string, required)
24
+ * **columns**: columns (string, required)
25
+ * **options**: extra JDBC properties (string, default: {})
26
+ * **null_to_zero**: if true, convert long, double and boolean value from null to zero (boolean, default: false)
23
27
 
24
28
  ## Example
25
29
 
@@ -36,6 +40,7 @@ in:
36
40
  columns:
37
41
  - {name: uid, type: string}
38
42
  - {name: created_at, type: timestamp}
43
+ null_to_zero: true
39
44
  ```
40
45
 
41
46
  ## Build
data/build.gradle CHANGED
@@ -1,6 +1,6 @@
1
1
  plugins {
2
2
  id "com.jfrog.bintray" version "1.1"
3
- id "com.github.jruby-gradle.base" version "0.1.5"
3
+ id "com.github.jruby-gradle.base" version "1.5.0"
4
4
  id "java"
5
5
  id "checkstyle"
6
6
  // for task download
@@ -9,14 +9,12 @@ plugins {
9
9
  import com.github.jrubygradle.JRubyExec
10
10
  repositories {
11
11
  mavenCentral()
12
- jcenter()
13
- maven { url "https://dl.bintray.com/embulk-input-jdbc/maven" }
14
12
  }
15
13
  configurations {
16
14
  provided
17
15
  }
18
16
 
19
- version = "0.1.2"
17
+ version = "0.1.7"
20
18
 
21
19
  sourceCompatibility = 1.8
22
20
  targetCompatibility = 1.8
@@ -25,15 +23,15 @@ dependencies {
25
23
  compile "org.embulk:embulk-core:0.8.39"
26
24
  provided "org.embulk:embulk-core:0.8.39"
27
25
  // TODO: maven...
28
- compile files ('build/AthenaJDBC41-1.1.0.jar')
26
+ compile files ('build/AthenaJDBC41.jar')
29
27
  compile group: 'com.amazonaws', name: 'aws-java-sdk', version: '1.11.301'
30
28
  // compile group: 'com.amazonaws', name: 'aws-java-sdk-athena', version: '1.11.301'
31
- compile 'org.embulk.input.jdbc:embulk-input-jdbc:0.9.1'
29
+ compile 'org.embulk:embulk-input-jdbc:0.12.2'
32
30
  testCompile "junit:junit:4.+"
33
31
  }
34
32
 
35
33
  task downloadFile(type: Download) {
36
- src 'https://s3.amazonaws.com/athena-downloads/drivers/AthenaJDBC41-1.1.0.jar'
34
+ src 'https://s3.amazonaws.com/athena-downloads/drivers/JDBC/SimbaAthenaJDBC-2.0.23.1000/AthenaJDBC41.jar'
37
35
  dest buildDir
38
36
  onlyIfModified true
39
37
  }
@@ -41,7 +39,7 @@ task downloadFile(type: Download) {
41
39
  task classpath(type: Copy, dependsOn: ["downloadFile", "jar"]) {
42
40
  doFirst { file("classpath").deleteDir() }
43
41
  from (configurations.runtime - configurations.provided + files(jar.archivePath))
44
- from ("build/AthenaJDBC41-1.1.0.jar'")
42
+ from ("build/AthenaJDBC41.jar")
45
43
  into "classpath"
46
44
  }
47
45
  clean { delete "classpath" }
@@ -64,14 +62,16 @@ task checkstyle(type: Checkstyle) {
64
62
  }
65
63
 
66
64
  task gem(type: JRubyExec, dependsOn: ["gemspec", "classpath"]) {
67
- jrubyArgs "-rrubygems/gem_runner", "-eGem::GemRunner.new.run(ARGV)", "build"
68
- script "${project.name}.gemspec"
65
+ jrubyArgs "-S"
66
+ script "gem"
67
+ scriptArgs "build", "${project.name}.gemspec"
69
68
  doLast { ant.move(file: "${project.name}-${project.version}.gem", todir: "pkg") }
70
69
  }
71
70
 
72
71
  task gemPush(type: JRubyExec, dependsOn: ["gem"]) {
73
- jrubyArgs "-rrubygems/gem_runner", "-eGem::GemRunner.new.run(ARGV)", "push"
74
- script "pkg/${project.name}-${project.version}.gem"
72
+ jrubyArgs "-S"
73
+ script "gem"
74
+ scriptArgs "push", "pkg/${project.name}-${project.version}.gem"
75
75
  }
76
76
 
77
77
  task "package"(dependsOn: ["gemspec", "classpath"]) {
@@ -1,3 +1,4 @@
1
+ /*
1
2
  package org.embulk.input.athena;
2
3
 
3
4
  import java.util.List;
@@ -48,3 +49,4 @@ public class AthenaInputConnection
48
49
  return new SingleSelect(stmt);
49
50
  }
50
51
  }
52
+ */
@@ -1,5 +1,7 @@
1
1
  package org.embulk.input.athena;
2
2
 
3
+ import com.google.common.base.Optional;
4
+
3
5
  import java.io.File;
4
6
  import java.io.FileFilter;
5
7
  import java.net.MalformedURLException;
@@ -10,14 +12,11 @@ import java.nio.file.Paths;
10
12
  import java.sql.Connection;
11
13
  import java.sql.DriverManager;
12
14
  import java.sql.ResultSet;
13
- import java.sql.ResultSetMetaData;
14
15
  import java.sql.SQLException;
15
16
  import java.sql.Statement;
16
17
  import java.util.List;
17
18
  import java.util.Properties;
18
19
 
19
- import com.google.common.base.Optional;
20
-
21
20
  import org.embulk.config.Config;
22
21
  import org.embulk.config.ConfigDefault;
23
22
  import org.embulk.config.ConfigDiff;
@@ -41,15 +40,16 @@ import org.embulk.spi.SchemaConfig;
41
40
  import org.embulk.spi.time.Timestamp;
42
41
  import org.slf4j.Logger;
43
42
 
44
- public class AthenaInputPlugin implements InputPlugin {
45
-
43
+ public class AthenaInputPlugin implements InputPlugin
44
+ {
46
45
  protected final Logger logger = Exec.getLogger(getClass());
47
46
 
48
- public interface PluginTask extends Task {
47
+ public interface PluginTask extends Task
48
+ {
49
49
  @Config("driver_path")
50
50
  @ConfigDefault("null")
51
- public Optional <String> getDriverPath();
52
-
51
+ public Optional<String> getDriverPath();
52
+
53
53
  // database (required string)
54
54
  @Config("database")
55
55
  public String getDatabase();
@@ -82,12 +82,17 @@ public class AthenaInputPlugin implements InputPlugin {
82
82
  @ConfigDefault("{}")
83
83
  public ToStringMap getOptions();
84
84
 
85
+ @Config("null_to_zero")
86
+ @ConfigDefault("false")
87
+ public boolean getNullToZero();
88
+
85
89
  @ConfigInject
86
90
  BufferAllocator getBufferAllocator();
87
91
  }
88
92
 
89
93
  @Override
90
- public ConfigDiff transaction(ConfigSource config, InputPlugin.Control control) {
94
+ public ConfigDiff transaction(ConfigSource config, InputPlugin.Control control)
95
+ {
91
96
  PluginTask task = config.loadConfig(PluginTask.class);
92
97
 
93
98
  Schema schema = task.getColumns().toSchema();
@@ -97,17 +102,20 @@ public class AthenaInputPlugin implements InputPlugin {
97
102
  }
98
103
 
99
104
  @Override
100
- public ConfigDiff resume(TaskSource taskSource, Schema schema, int taskCount, InputPlugin.Control control) {
105
+ public ConfigDiff resume(TaskSource taskSource, Schema schema, int taskCount, InputPlugin.Control control)
106
+ {
101
107
  control.run(taskSource, schema, taskCount);
102
108
  return Exec.newConfigDiff();
103
109
  }
104
110
 
105
111
  @Override
106
- public void cleanup(TaskSource taskSource, Schema schema, int taskCount, List<TaskReport> successTaskReports) {
112
+ public void cleanup(TaskSource taskSource, Schema schema, int taskCount, List<TaskReport> successTaskReports)
113
+ {
107
114
  }
108
115
 
109
116
  @Override
110
- public TaskReport run(TaskSource taskSource, Schema schema, int taskIndex, PageOutput output) {
117
+ public TaskReport run(TaskSource taskSource, Schema schema, int taskIndex, PageOutput output)
118
+ {
111
119
  PluginTask task = taskSource.loadTask(PluginTask.class);
112
120
  BufferAllocator allocator = task.getBufferAllocator();
113
121
  PageBuilder pageBuilder = new PageBuilder(allocator, schema, output);
@@ -120,58 +128,93 @@ public class AthenaInputPlugin implements InputPlugin {
120
128
  connection = getAthenaConnection(task);
121
129
  statement = connection.createStatement();
122
130
  ResultSet resultSet = statement.executeQuery(task.getQuery());
131
+ boolean nullToZero = task.getNullToZero();
123
132
 
124
- ResultSetMetaData m = resultSet.getMetaData();
125
133
  while (resultSet.next()) {
126
- schema.visitColumns(new ColumnVisitor() {
134
+ schema.visitColumns(new ColumnVisitor()
135
+ {
127
136
  @Override
128
- public void timestampColumn(Column column) {
137
+ public void timestampColumn(Column column)
138
+ {
129
139
  try {
130
140
  java.sql.Timestamp t = resultSet.getTimestamp(column.getName());
131
141
  pageBuilder.setTimestamp(column, Timestamp.ofEpochMilli(t.getTime()));
132
- } catch (SQLException e) {
142
+ }
143
+ catch (SQLException e) {
133
144
  e.printStackTrace();
145
+ throw new RuntimeException(e);
134
146
  }
135
147
  }
136
148
 
137
149
  @Override
138
- public void stringColumn(Column column) {
150
+ public void stringColumn(Column column)
151
+ {
139
152
  try {
140
153
  pageBuilder.setString(column, resultSet.getString(column.getName()));
141
- } catch (SQLException e) {
154
+ }
155
+ catch (SQLException e) {
142
156
  e.printStackTrace();
157
+ throw new RuntimeException(e);
143
158
  }
144
159
  }
145
160
 
146
161
  @Override
147
- public void longColumn(Column column) {
162
+ public void longColumn(Column column)
163
+ {
148
164
  try {
149
- pageBuilder.setLong(column, resultSet.getLong(column.getName()));
150
- } catch (SQLException e) {
165
+ long ret = resultSet.getLong(column.getName());
166
+ if (resultSet.wasNull() && !nullToZero){
167
+ pageBuilder.setNull(column);
168
+ }
169
+ else {
170
+ pageBuilder.setLong(column, ret);
171
+ }
172
+ }
173
+ catch (SQLException e) {
151
174
  e.printStackTrace();
175
+ throw new RuntimeException(e);
152
176
  }
153
177
  }
154
178
 
155
179
  @Override
156
- public void doubleColumn(Column column) {
180
+ public void doubleColumn(Column column)
181
+ {
157
182
  try {
158
- pageBuilder.setDouble(column, resultSet.getDouble(column.getName()));
159
- } catch (SQLException e) {
183
+ double ret = resultSet.getDouble(column.getName());
184
+ if (resultSet.wasNull() && !nullToZero){
185
+ pageBuilder.setNull(column);
186
+ }
187
+ else {
188
+ pageBuilder.setDouble(column, ret);
189
+ }
190
+ }
191
+ catch (SQLException e) {
160
192
  e.printStackTrace();
193
+ throw new RuntimeException(e);
161
194
  }
162
195
  }
163
196
 
164
197
  @Override
165
- public void booleanColumn(Column column) {
198
+ public void booleanColumn(Column column)
199
+ {
166
200
  try {
167
- pageBuilder.setBoolean(column, resultSet.getBoolean(column.getName()));
168
- } catch (SQLException e) {
201
+ boolean ret = resultSet.getBoolean(column.getName());
202
+ if (resultSet.wasNull() && !nullToZero){
203
+ pageBuilder.setNull(column);
204
+ }
205
+ else {
206
+ pageBuilder.setBoolean(column, ret);
207
+ }
208
+ }
209
+ catch (SQLException e) {
169
210
  e.printStackTrace();
211
+ throw new RuntimeException(e);
170
212
  }
171
213
  }
172
214
 
173
215
  @Override
174
- public void jsonColumn(Column column) {
216
+ public void jsonColumn(Column column)
217
+ {
175
218
  // TODO:
176
219
  }
177
220
  });
@@ -183,19 +226,24 @@ public class AthenaInputPlugin implements InputPlugin {
183
226
  pageBuilder.close();
184
227
  resultSet.close();
185
228
  connection.close();
186
- } catch (Exception e) {
229
+ }
230
+ catch (Exception e) {
187
231
  e.printStackTrace();
188
- } finally {
232
+ throw new RuntimeException(e);
233
+ }
234
+ finally {
189
235
  try {
190
- if (statement != null)
236
+ if (statement != null) {
191
237
  statement.close();
192
- } catch (Exception ex) {
193
-
238
+ }
194
239
  }
240
+ catch (Exception ex) { }
195
241
  try {
196
- if (connection != null)
242
+ if (connection != null) {
197
243
  connection.close();
198
- } catch (Exception ex) {
244
+ }
245
+ }
246
+ catch (Exception ex) {
199
247
  ex.printStackTrace();
200
248
  }
201
249
  }
@@ -204,16 +252,19 @@ public class AthenaInputPlugin implements InputPlugin {
204
252
  }
205
253
 
206
254
  @Override
207
- public ConfigDiff guess(ConfigSource config) {
255
+ public ConfigDiff guess(ConfigSource config)
256
+ {
208
257
  return Exec.newConfigDiff();
209
258
  }
210
259
 
211
- protected Connection getAthenaConnection(PluginTask task) throws ClassNotFoundException, SQLException {
212
- loadDriver("com.amazonaws.athena.jdbc.AthenaDriver", task.getDriverPath());
260
+ protected Connection getAthenaConnection(PluginTask task) throws ClassNotFoundException, SQLException
261
+ {
262
+ loadDriver("com.simba.athena.jdbc.Driver", task.getDriverPath());
213
263
  Properties properties = new Properties();
214
264
  properties.put("s3_staging_dir", task.getS3StagingDir());
215
265
  properties.put("user", task.getAccessKey());
216
266
  properties.put("password", task.getSecretKey());
267
+ properties.put("schema", task.getDatabase());
217
268
  properties.putAll(task.getOptions());
218
269
 
219
270
  return DriverManager.getConnection(task.getAthenaUrl(), properties);
@@ -227,23 +278,26 @@ public class AthenaInputPlugin implements InputPlugin {
227
278
  {
228
279
  if (driverPath.isPresent()) {
229
280
  addDriverJarToClasspath(driverPath.get());
230
- } else {
281
+ }
282
+ else {
231
283
  try {
232
284
  // Gradle test task will add JDBC driver to classpath
233
285
  Class.forName(className);
234
-
235
- } catch (ClassNotFoundException ex) {
286
+ }
287
+ catch (ClassNotFoundException ex) {
236
288
  File root = findPluginRoot();
237
289
  File driverLib = new File(root, "default_jdbc_driver");
238
290
  File[] files = driverLib.listFiles(new FileFilter() {
239
291
  @Override
240
- public boolean accept(File file) {
292
+ public boolean accept(File file)
293
+ {
241
294
  return file.isFile() && file.getName().endsWith(".jar");
242
295
  }
243
296
  });
244
297
  if (files == null || files.length == 0) {
245
298
  throw new RuntimeException("Cannot find JDBC driver in '" + root.getAbsolutePath() + "'.");
246
- } else {
299
+ }
300
+ else {
247
301
  for (File file : files) {
248
302
  logger.info("JDBC Driver = " + file.getAbsolutePath());
249
303
  addDriverJarToClasspath(file.getAbsolutePath());
@@ -255,7 +309,8 @@ public class AthenaInputPlugin implements InputPlugin {
255
309
  // Load JDBC Driver
256
310
  try {
257
311
  Class.forName(className);
258
- } catch (ClassNotFoundException ex) {
312
+ }
313
+ catch (ClassNotFoundException ex) {
259
314
  throw new RuntimeException(ex);
260
315
  }
261
316
  }
@@ -289,7 +344,8 @@ public class AthenaInputPlugin implements InputPlugin {
289
344
  return folder;
290
345
  }
291
346
  }
292
- } catch (MalformedURLException | URISyntaxException e) {
347
+ }
348
+ catch (MalformedURLException | URISyntaxException e) {
293
349
  throw new RuntimeException(e);
294
350
  }
295
351
  }
@@ -0,0 +1,4 @@
1
+ log4j.rootLogger=INFO, ROOT
2
+
3
+ log4j.appender.ROOT=com.simba.athena.shaded.apache.log4j.varia.NullAppender
4
+ log4j.appender.ROOT.layout=com.simba.athena.shaded.apache.log4j.PatternLayout
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-input-athena
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - shinji19
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-17 00:00:00.000000000 Z
11
+ date: 2021-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - ~>
16
+ - - "~>"
17
17
  - !ruby/object:Gem::Version
18
18
  version: '1.0'
19
19
  name: bundler
@@ -21,13 +21,13 @@ dependencies:
21
21
  type: :development
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - '>='
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: '10.0'
33
33
  name: rake
@@ -35,7 +35,7 @@ dependencies:
35
35
  type: :development
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  description: Loads records from Athena.
@@ -45,24 +45,12 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - .gitignore
48
+ - ".gitignore"
49
49
  - Dockerfile
50
50
  - LICENSE
51
51
  - README.md
52
52
  - build.gradle
53
- - config/checkstyle/checkstyle.xml
54
- - config/checkstyle/default.xml
55
- - docker-compose.yml
56
- - gradle/wrapper/gradle-wrapper.jar
57
- - gradle/wrapper/gradle-wrapper.properties
58
- - gradlew
59
- - gradlew.bat
60
- - lib/embulk/input/athena.rb
61
- - src/main/java/org/embulk/input/athena/AthenaInputConnection.java
62
- - src/main/java/org/embulk/input/athena/AthenaInputPlugin.java
63
- - src/main/java/org/embulk/input/athena/AthenaInputPlugin.java.tmp1
64
- - src/test/java/org/embulk/input/athena/TestAthenaInputPlugin.java
65
- - classpath/AthenaJDBC41-1.1.0.jar
53
+ - classpath/AthenaJDBC41.jar
66
54
  - classpath/aws-java-sdk-1.11.301.jar
67
55
  - classpath/aws-java-sdk-acm-1.11.301.jar
68
56
  - classpath/aws-java-sdk-alexaforbusiness-1.11.301.jar
@@ -192,13 +180,18 @@ files:
192
180
  - classpath/aws-java-sdk-xray-1.11.301.jar
193
181
  - classpath/commons-codec-1.10.jar
194
182
  - classpath/commons-logging-1.2.jar
195
- - classpath/embulk-input-athena-0.1.2.jar
196
- - classpath/embulk-input-jdbc-0.9.1.jar
183
+ - classpath/embulk-input-athena-0.1.7.jar
184
+ - classpath/embulk-input-jdbc-0.12.2.jar
185
+ - classpath/embulk-util-config-0.3.0.jar
186
+ - classpath/embulk-util-json-0.1.1.jar
187
+ - classpath/embulk-util-rubytime-0.3.2.jar
188
+ - classpath/embulk-util-timestamp-0.2.1.jar
197
189
  - classpath/httpclient-4.5.5.jar
198
190
  - classpath/httpcore-4.4.9.jar
199
191
  - classpath/ion-java-1.0.2.jar
200
192
  - classpath/jackson-databind-2.6.7.1.jar
201
193
  - classpath/jackson-dataformat-cbor-2.6.7.jar
194
+ - classpath/jackson-datatype-jdk8-2.6.7.jar
202
195
  - classpath/jmespath-java-1.11.301.jar
203
196
  - classpath/netty-buffer-4.1.17.Final.jar
204
197
  - classpath/netty-codec-4.1.17.Final.jar
@@ -207,6 +200,18 @@ files:
207
200
  - classpath/netty-handler-4.1.17.Final.jar
208
201
  - classpath/netty-resolver-4.1.17.Final.jar
209
202
  - classpath/netty-transport-4.1.17.Final.jar
203
+ - config/checkstyle/checkstyle.xml
204
+ - config/checkstyle/default.xml
205
+ - docker-compose.yml
206
+ - gradle/wrapper/gradle-wrapper.jar
207
+ - gradle/wrapper/gradle-wrapper.properties
208
+ - gradlew
209
+ - gradlew.bat
210
+ - lib/embulk/input/athena.rb
211
+ - src/main/java/org/embulk/input/athena/AthenaInputConnection.java
212
+ - src/main/java/org/embulk/input/athena/AthenaInputPlugin.java
213
+ - src/main/resources/log4j.properties
214
+ - src/test/java/org/embulk/input/athena/TestAthenaInputPlugin.java
210
215
  homepage: https://github.com/shinji19/embulk-input-athena
211
216
  licenses:
212
217
  - MIT
@@ -217,17 +222,17 @@ require_paths:
217
222
  - lib
218
223
  required_ruby_version: !ruby/object:Gem::Requirement
219
224
  requirements:
220
- - - '>='
225
+ - - ">="
221
226
  - !ruby/object:Gem::Version
222
227
  version: '0'
223
228
  required_rubygems_version: !ruby/object:Gem::Requirement
224
229
  requirements:
225
- - - '>='
230
+ - - ">="
226
231
  - !ruby/object:Gem::Version
227
232
  version: '0'
228
233
  requirements: []
229
234
  rubyforge_project:
230
- rubygems_version: 2.1.9
235
+ rubygems_version: 2.6.8
231
236
  signing_key:
232
237
  specification_version: 4
233
238
  summary: Athena input plugin for Embulk
Binary file
@@ -1,192 +0,0 @@
1
- package org.embulk.input.athena;
2
-
3
- import java.sql.Connection;
4
- import java.sql.DriverManager;
5
- import java.sql.ResultSet;
6
- import java.sql.SQLException;
7
- import java.sql.Statement;
8
- import java.util.List;
9
- import java.util.Properties;
10
-
11
- import com.google.common.base.Optional;
12
-
13
- import org.embulk.config.Config;
14
- import org.embulk.config.ConfigDefault;
15
- import org.embulk.config.ConfigDiff;
16
- import org.embulk.config.ConfigSource;
17
- import org.embulk.config.Task;
18
- import org.embulk.config.TaskReport;
19
- import org.embulk.config.TaskSource;
20
- import org.embulk.input.jdbc.AbstractJdbcInputPlugin;
21
- import org.embulk.input.jdbc.JdbcInputConnection;
22
- import org.embulk.spi.Exec;
23
- import org.embulk.spi.InputPlugin;
24
- import org.embulk.spi.PageOutput;
25
- import org.embulk.spi.Schema;
26
- import org.embulk.spi.SchemaConfig;
27
-
28
- public class AthenaInputPlugin
29
- extends AbstractJdbcInputPlugin
30
- {
31
- public interface AthenaPluginTask
32
- extends AbstractJdbcInputPlugin.PluginTask
33
- {
34
- @Config("driver_path")
35
- @ConfigDefault("null")
36
- public Optional<String> getDriverPath();
37
-
38
- // athena_url (required string)
39
- @Config("athena_url")
40
- public String getAthenaUrl();
41
-
42
- // s3_staging_dir (required string)
43
- @Config("s3_staging_dir")
44
- public String getS3StagingDir();
45
-
46
- // access_key (required string)
47
- @Config("access_key")
48
- public String getAccessKey();
49
-
50
- // secret_key (required string)
51
- @Config("secret_key")
52
- public String getSecretKey();
53
-
54
- // configuration option 2 (optional string, null is not allowed)
55
- // @Config("option2")
56
- // @ConfigDefault("\"myvalue\"")
57
- // public String getOption2();
58
-
59
- // configuration option 3 (optional string, null is allowed)
60
- // @Config("option3")
61
- // @ConfigDefault("null")
62
- // public Optional<String> getOption3();
63
-
64
- // if you get schema from config
65
- // @Config("columns")
66
- // public SchemaConfig getColumns();
67
- }
68
-
69
- @Override
70
- protected Class<? extends PluginTask> getTaskClass() {
71
- return AthenaPluginTask.class;
72
- }
73
-
74
- @Override
75
- protected AthenaInputConnection newConnection(PluginTask pluginTask) throws SQLException {
76
- AthenaPluginTask task = (AthenaPluginTask) pluginTask;
77
- loadDriver("com.amazonaws.athena.jdbc.AthenaDriver", task.getDriverPath());
78
- //Class.forName("com.amazonaws.athena.jdbc.AthenaDriver");
79
- Properties properties = new Properties();
80
- properties.put("s3_staging_dir", task.getS3StagingDir());
81
- properties.put("user", task.getAccessKey());
82
- properties.put("password", task.getSecretKey());
83
- properties.putAll(task.getOptions());
84
-
85
- Connection connection = DriverManager.getConnection(task.getAthenaUrl(), properties);
86
- try {
87
- AthenaInputConnection c = new AthenaInputConnection(connection);
88
- connection = null;
89
- return c;
90
- } finally {
91
- if (connection != null) {
92
- connection.close();
93
- }
94
- }
95
- }
96
-
97
- /*
98
- @Override
99
- public ConfigDiff transaction(ConfigSource config,
100
- InputPlugin.Control control)
101
- {
102
- PluginTask task = config.loadConfig(PluginTask.class);
103
-
104
- // Schema schema = task.getColumns().toSchema();
105
- Schema schema = Schema.builder().build();
106
- int taskCount = 1; // number of run() method calls
107
-
108
- return resume(task.dump(), schema, taskCount, control);
109
- }
110
-
111
- @Override
112
- public ConfigDiff resume(TaskSource taskSource,
113
- Schema schema, int taskCount,
114
- InputPlugin.Control control)
115
- {
116
- control.run(taskSource, schema, taskCount);
117
- return Exec.newConfigDiff();
118
- }
119
-
120
- @Override
121
- public void cleanup(TaskSource taskSource,
122
- Schema schema, int taskCount,
123
- List<TaskReport> successTaskReports)
124
- {
125
- }
126
-
127
- @Override
128
- public TaskReport run(TaskSource taskSource,
129
- Schema schema, int taskIndex,
130
- PageOutput output)
131
- {
132
- PluginTask task = taskSource.loadTask(PluginTask.class);
133
-
134
- // Write your code here :)
135
-
136
- Connection connection = null;
137
- Statement statement = null;
138
- try {
139
- connection = getAthenaConnection(task);
140
- statement = connection.createStatement();
141
- ResultSet resultSet = statement.executeQuery("select * from default.sample");
142
-
143
- while(resultSet.next()){
144
- String statusCode = resultSet.getString("created_at");
145
- System.out.println("st code" + statusCode);
146
- }
147
- resultSet.close();
148
- connection.close();
149
- } catch (Exception e){
150
- e.printStackTrace();
151
- } finally {
152
- try {
153
- if (statement != null)
154
- statement.close();
155
- } catch (Exception ex) {
156
-
157
- }
158
- try {
159
- if (connection != null)
160
- connection.close();
161
- } catch (Exception ex) {
162
- ex.printStackTrace();
163
- }
164
- }
165
-
166
- return Exec.newTaskReport();
167
- }
168
-
169
- @Override
170
- public ConfigDiff guess(ConfigSource config)
171
- {
172
- return Exec.newConfigDiff();
173
- }
174
- */
175
- /*
176
- protected Connection getAthenaConnection(PluginTask task) throws ClassNotFoundException, SQLException{
177
- Class.forName("com.amazonaws.athena.jdbc.AthenaDriver");
178
- Properties properties = new Properties();
179
- properties.put("s3_staging_dir", task.getS3StagingDir());
180
- properties.put("user", task.getAccessKey());
181
- properties.put("password", task.getSecretKey());
182
- if (task.getLogPath() != null){
183
- properties.put("log_path", task.getLogPath());
184
- }
185
- if (task.getLogLevel() != null){
186
- properties.put("log_level", task.getLogLevel());
187
- }
188
-
189
- return DriverManager.getConnection(task.getAthenaUrl(), properties);
190
- }
191
- */
192
- }