embulk-input-oracle 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f72a6a78e5dbfc26d82184d49ac814a895dcf618
4
+ data.tar.gz: 4dc9ad16ed3027e889add065039d8aceda3e02ed
5
+ SHA512:
6
+ metadata.gz: abe4d88d1401129bf7d59867470656a8c7b54bd2bcd15d47d9592a78c956daf6e9a6c6181c086c09b20f47c12a678d3cd9473c8d1b130a9e3ec9bdd8b1cdd281
7
+ data.tar.gz: ac78869b2fcf9fd18c6362c32efd7fedcc76a0a64f9074c3f23a9fd7c9e5e429b106532db57681d16f1950618d34aba02d7b8ffcc44ed12e14a28c728992d5a9
data/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # Oracle input plugins for Embulk
2
+
3
+ Oracle input plugins for Embulk loads records from Oracle.
4
+
5
+ ## Overview
6
+
7
+ * **Plugin type**: input
8
+ * **Resume supported**: yes
9
+
10
+ ## Configuration
11
+
12
+ - **driver_path**: path to the jar file of the Oracle JDBC driver (string)
13
+ - **host**: database host name (string, required if url is not set)
14
+ - **port**: database port number (integer, default: 1521)
15
+ - **user**: database login user name (string, required)
16
+ - **password**: database login password (string, default: "")
17
+ - **database**: destination database name (string, required if url is not set)
18
+ - **url**: URL of the JDBC connection (string, optional)
19
+ - If you write SQL directly,
20
+ - **query**: SQL to run (string)
21
+ - If **query** is not set,
22
+ - **table**: destination table name (string, required)
23
+ - **select**: comma-separated list of columns to select (string, default: "*")
24
+ - **where**: WHERE condition to filter the rows (string, default: no-condition)
25
+ - **fetch_rows**: number of rows to fetch one time (used for java.sql.Statement#setFetchSize) (integer, default: 10000)
26
+ - **options**: extra JDBC properties (hash, default: {})
27
+ - **default_timezone**: If the sql type of a column is `date`/`time`/`datetime` and the embulk type is `string`, column values are formatted int this default_timezone. You can overwrite timezone for each columns using column_options option. (string, default: `UTC`)
28
+ - **column_options**: advanced: a key-value pairs where key is a column name and value is options for the column.
29
+ - **value_type**: embulk get values from database as this value_type. Typically, the value_type determines `getXXX` method of `java.sql.PreparedStatement`.
30
+ (string, default: depends on the sql type of the column. Available values options are: `long`, `double`, `float`, `decimal`, `boolean`, `string`, `date`, `time`, `timestamp`)
31
+ - **type**: Column values are converted to this embulk type.
32
+ Available values options are: `boolean`, `long`, `double`, `string`, `timestamp`).
33
+ By default, the embulk type is determined according to the sql type of the column (or value_type if specified).
34
+ - **timestamp_format**: If the sql type of the column is `date`/`time`/`datetime` and the embulk type is `string`, column values are formatted by this timestamp_format. And if the embulk type is `timestamp`, this timestamp_format will be used in the output plugin. (string, default : `%Y-%m-%d` for `date`, `%H:%M:%S` for `time`, `%Y-%m-%d %H:%M:%S` for `timestamp`)
35
+ - **timezone**: If the sql type of the column is `date`/`time`/`datetime` and the embulk type is `string`, column values are formatted in this timezone.
36
+ (string, value of default_timezone option is used by default)
37
+
38
+ ## Example
39
+
40
+ ```yaml
41
+ in:
42
+ type: oracle
43
+ driver_path: /opt/oracle/ojdbc7.jar
44
+ host: localhost
45
+ user: myuser
46
+ password: ""
47
+ database: my_database
48
+ table: my_table
49
+ select: "col1, col2, col3"
50
+ where: "col4 != 'a'"
51
+ ```
52
+
53
+ If you need a complex SQL,
54
+
55
+ ```yaml
56
+ in:
57
+ type: oracle
58
+ driver_path: /opt/oracle/ojdbc7.jar
59
+ host: localhost
60
+ user: myuser
61
+ password: ""
62
+ database: my_database
63
+ query: |
64
+ SELECT t1.id, t1.name, t2.id AS t2_id, t2.name AS t2_name
65
+ FROM table1 AS t1
66
+ LEFT JOIN table2 AS t2
67
+ ON t1.id = t2.t1_id
68
+ ```
69
+
70
+ Advanced configuration:
71
+
72
+ ```yaml
73
+ in:
74
+ type: oracle
75
+ driver_path: /opt/oracle/ojdbc7.jar
76
+ host: localhost
77
+ user: myuser
78
+ password: ""
79
+ database: my_database
80
+ table: "my_table"
81
+ select: "col1, col2, col3"
82
+ where: "col4 != 'a'"
83
+ column_options:
84
+ col1: {type: long}
85
+ col3: {type: string, timestamp_format: "%Y/%m/%d", timezone: "+0900"}
86
+
87
+ ```
88
+
89
+ ## Build
90
+
91
+ ```
92
+ $ ./gradlew gem
93
+ ```
data/build.gradle ADDED
@@ -0,0 +1,5 @@
1
+ dependencies {
2
+ compile project(':embulk-input-jdbc')
3
+
4
+ testCompile project(':embulk-input-jdbc').sourceSets.test.output
5
+ }
@@ -0,0 +1,3 @@
1
+ Embulk::JavaPlugin.register_input(
2
+ :oracle, "org.embulk.input.OracleInputPlugin",
3
+ File.expand_path('../../../../classpath', __FILE__))
@@ -0,0 +1,105 @@
1
+ package org.embulk.input;
2
+
3
+ import java.sql.Connection;
4
+ import java.sql.DriverManager;
5
+ import java.sql.SQLException;
6
+ import java.util.Properties;
7
+
8
+ import org.embulk.config.Config;
9
+ import org.embulk.config.ConfigDefault;
10
+ import org.embulk.input.jdbc.AbstractJdbcInputPlugin;
11
+ import org.embulk.input.jdbc.JdbcInputConnection;
12
+ import org.embulk.input.oracle.OracleInputConnection;
13
+
14
+ import com.google.common.base.Optional;
15
+
16
+ public class OracleInputPlugin
17
+ extends AbstractJdbcInputPlugin
18
+ {
19
+ public interface OraclePluginTask
20
+ extends PluginTask
21
+ {
22
+ @Config("driver_path")
23
+ @ConfigDefault("null")
24
+ public Optional<String> getDriverPath();
25
+
26
+ @Config("host")
27
+ @ConfigDefault("null")
28
+ public Optional<String> getHost();
29
+
30
+ @Config("port")
31
+ @ConfigDefault("1521")
32
+ public int getPort();
33
+
34
+ @Config("database")
35
+ @ConfigDefault("null")
36
+ public Optional<String> getDatabase();
37
+
38
+ @Config("url")
39
+ @ConfigDefault("null")
40
+ public Optional<String> getUrl();
41
+
42
+ @Config("user")
43
+ public String getUser();
44
+
45
+ @Config("password")
46
+ @ConfigDefault("\"\"")
47
+ public String getPassword();
48
+ }
49
+
50
+ @Override
51
+ protected Class<? extends PluginTask> getTaskClass()
52
+ {
53
+ return OraclePluginTask.class;
54
+ }
55
+
56
+ @Override
57
+ protected JdbcInputConnection newConnection(PluginTask task) throws SQLException
58
+ {
59
+ OraclePluginTask oracleTask = (OraclePluginTask) task;
60
+
61
+ String url;
62
+ if (oracleTask.getUrl().isPresent()) {
63
+ if (oracleTask.getHost().isPresent() || oracleTask.getDatabase().isPresent()) {
64
+ throw new IllegalArgumentException("'host', 'port' and 'database' parameters are invalid if 'url' parameter is set.");
65
+ }
66
+ url = oracleTask.getUrl().get();
67
+ } else {
68
+ if (!oracleTask.getHost().isPresent()) {
69
+ throw new IllegalArgumentException("Field 'host' is not set.");
70
+ }
71
+ if (!oracleTask.getDatabase().isPresent()) {
72
+ throw new IllegalArgumentException("Field 'database' is not set.");
73
+ }
74
+ url = String.format("jdbc:oracle:thin:@%s:%d:%s",
75
+ oracleTask.getHost().get(), oracleTask.getPort(), oracleTask.getDatabase().get());
76
+ }
77
+
78
+ Properties props = new Properties();
79
+ props.setProperty("user", oracleTask.getUser());
80
+ props.setProperty("password", oracleTask.getPassword());
81
+ props.putAll(oracleTask.getOptions());
82
+
83
+ if (oracleTask.getDriverPath().isPresent()) {
84
+ loadDriverJar(oracleTask.getDriverPath().get());
85
+ }
86
+
87
+ try {
88
+ Class.forName("oracle.jdbc.OracleDriver");
89
+ } catch (Exception ex) {
90
+ throw new RuntimeException(ex);
91
+ }
92
+
93
+ Connection con = DriverManager.getConnection(url, props);
94
+ try {
95
+ OracleInputConnection c = new OracleInputConnection(con, oracleTask.getUser());
96
+ con = null;
97
+ return c;
98
+ } finally {
99
+ if (con != null) {
100
+ con.close();
101
+ }
102
+ }
103
+ }
104
+
105
+ }
@@ -0,0 +1,21 @@
1
+ package org.embulk.input.oracle;
2
+
3
+ import java.sql.Connection;
4
+ import java.sql.SQLException;
5
+
6
+ import org.embulk.input.jdbc.JdbcInputConnection;
7
+
8
+ public class OracleInputConnection extends JdbcInputConnection {
9
+
10
+ public OracleInputConnection(Connection connection, String schemaName) throws SQLException
11
+ {
12
+ super(connection, schemaName);
13
+ }
14
+
15
+ @Override
16
+ protected void setSearchPath(String schema) throws SQLException
17
+ {
18
+ // NOP
19
+ }
20
+
21
+ }
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: embulk-input-oracle
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Sadayuki Furuhashi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Selects records from a table.
14
+ email:
15
+ - frsyuki@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - README.md
21
+ - build.gradle
22
+ - lib/embulk/input/oracle.rb
23
+ - src/main/java/org/embulk/input/OracleInputPlugin.java
24
+ - src/main/java/org/embulk/input/oracle/OracleInputConnection.java
25
+ - classpath/embulk-input-jdbc-0.5.0.jar
26
+ - classpath/embulk-input-oracle-0.5.0.jar
27
+ homepage: https://github.com/embulk/embulk-input-jdbc
28
+ licenses:
29
+ - Apache 2.0
30
+ metadata: {}
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 2.1.9
48
+ signing_key:
49
+ specification_version: 4
50
+ summary: JDBC input plugin for Embulk
51
+ test_files: []