embulk-output-snowflake 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +14 -0
- data/LICENSE.txt +21 -0
- data/README.md +15 -59
- data/build.gradle +112 -3
- data/config/checkstyle/checkstyle.xml +128 -0
- data/config/checkstyle/default.xml +108 -0
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/gradlew +172 -0
- data/gradlew.bat +84 -0
- data/lib/embulk/output/snowflake.rb +1 -1
- data/src/main/java/org/embulk/output/SnowflakeOutputPlugin.java +72 -100
- data/src/main/java/org/embulk/output/snowflake/SnowflakeCopyBatchInsert.java +373 -0
- data/src/main/java/org/embulk/output/snowflake/SnowflakeOutputConnection.java +98 -27
- data/src/main/java/org/embulk/output/snowflake/SnowflakeOutputConnector.java +12 -13
- data/src/main/java/org/embulk/output/snowflake/SnowflakeUtils.java +17 -0
- data/src/main/java/org/embulk/output/snowflake/StageIdentifier.java +61 -0
- data/src/main/java/org/embulk/output/snowflake/StageIdentifierHolder.java +20 -0
- data/src/test/java/org/embulk/output/snowflake/TestSnowflakeOutputPlugin.java +5 -0
- metadata +53 -11
- data/classpath/embulk-output-jdbc-0.1.1.jar +0 -0
- data/classpath/embulk-output-snowflake-0.1.1.jar +0 -0
@@ -1,34 +1,32 @@
|
|
1
1
|
package org.embulk.output.snowflake;
|
2
2
|
|
3
3
|
import com.google.common.base.Optional;
|
4
|
+
import net.snowflake.client.jdbc.SnowflakeSQLException;
|
5
|
+
import net.snowflake.client.jdbc.SnowflakeType;
|
4
6
|
import org.embulk.output.jdbc.AbstractJdbcOutputConnector;
|
7
|
+
import org.embulk.output.jdbc.JdbcColumn;
|
5
8
|
import org.embulk.output.jdbc.JdbcOutputConnection;
|
6
9
|
import org.embulk.output.jdbc.TransactionIsolation;
|
7
10
|
|
8
11
|
import java.sql.Connection;
|
12
|
+
import java.sql.Driver;
|
9
13
|
import java.sql.DriverManager;
|
10
14
|
import java.sql.SQLException;
|
15
|
+
import java.util.Enumeration;
|
11
16
|
import java.util.Properties;
|
12
17
|
|
13
|
-
public class SnowflakeOutputConnector
|
14
|
-
extends AbstractJdbcOutputConnector
|
18
|
+
public class SnowflakeOutputConnector extends AbstractJdbcOutputConnector
|
15
19
|
{
|
16
20
|
private final String url;
|
17
21
|
private final Properties properties;
|
18
|
-
private final String schemaName;
|
19
22
|
|
20
|
-
public SnowflakeOutputConnector(String url, Properties properties,
|
21
|
-
|
23
|
+
public SnowflakeOutputConnector(String url, Properties properties,
|
24
|
+
Optional<TransactionIsolation> transactionIsolation)
|
22
25
|
{
|
23
26
|
super(transactionIsolation);
|
24
|
-
|
25
|
-
Class.forName("com.snowflake.client.jdbc.SnowflakeDriver");
|
26
|
-
} catch (Exception ex) {
|
27
|
-
throw new RuntimeException(ex);
|
28
|
-
}
|
27
|
+
|
29
28
|
this.url = url;
|
30
29
|
this.properties = properties;
|
31
|
-
this.schemaName = schemaName;
|
32
30
|
}
|
33
31
|
|
34
32
|
@Override
|
@@ -36,7 +34,7 @@ public class SnowflakeOutputConnector
|
|
36
34
|
{
|
37
35
|
Connection c = DriverManager.getConnection(url, properties);
|
38
36
|
try {
|
39
|
-
SnowflakeOutputConnection con = new SnowflakeOutputConnection(c
|
37
|
+
SnowflakeOutputConnection con = new SnowflakeOutputConnection(c);
|
40
38
|
c = null;
|
41
39
|
return con;
|
42
40
|
} finally {
|
@@ -45,4 +43,5 @@ public class SnowflakeOutputConnector
|
|
45
43
|
}
|
46
44
|
}
|
47
45
|
}
|
48
|
-
|
46
|
+
|
47
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
package org.embulk.output.snowflake;
|
2
|
+
|
3
|
+
import java.util.Random;
|
4
|
+
|
5
|
+
public class SnowflakeUtils {
|
6
|
+
public static final String SOURCES =
|
7
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
|
8
|
+
|
9
|
+
public static String randomString(int length){
|
10
|
+
Random rand = new Random();
|
11
|
+
char[] text = new char[length];
|
12
|
+
for (int i = 0; i < length; i++) {
|
13
|
+
text[i] = SOURCES.charAt(rand.nextInt(SOURCES.length()));
|
14
|
+
}
|
15
|
+
return new String(text);
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
package org.embulk.output.snowflake;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.annotation.JsonProperty;
|
4
|
+
import com.google.common.base.Optional;
|
5
|
+
|
6
|
+
public class StageIdentifier {
|
7
|
+
private String database;
|
8
|
+
private String schemaName;
|
9
|
+
private String stageName;
|
10
|
+
private Optional<String> destPrefix;
|
11
|
+
|
12
|
+
public StageIdentifier(String database, String schemaName, String stageName, Optional<String> destPrefix) {
|
13
|
+
this.database = database;
|
14
|
+
this.schemaName = schemaName;
|
15
|
+
this.stageName = stageName;
|
16
|
+
this.destPrefix = destPrefix;
|
17
|
+
}
|
18
|
+
|
19
|
+
public StageIdentifier() {
|
20
|
+
}
|
21
|
+
|
22
|
+
@JsonProperty
|
23
|
+
public String getDatabase() {
|
24
|
+
return database;
|
25
|
+
}
|
26
|
+
|
27
|
+
@JsonProperty
|
28
|
+
public void setDatabase(String database) {
|
29
|
+
this.database = database;
|
30
|
+
}
|
31
|
+
|
32
|
+
@JsonProperty
|
33
|
+
public String getSchemaName() {
|
34
|
+
return schemaName;
|
35
|
+
}
|
36
|
+
|
37
|
+
@JsonProperty
|
38
|
+
public void setSchemaName(String schemaName) {
|
39
|
+
this.schemaName = schemaName;
|
40
|
+
}
|
41
|
+
|
42
|
+
@JsonProperty
|
43
|
+
public String getStageName() {
|
44
|
+
return stageName;
|
45
|
+
}
|
46
|
+
|
47
|
+
@JsonProperty
|
48
|
+
public void setStageName(String stageName) {
|
49
|
+
this.stageName = stageName;
|
50
|
+
}
|
51
|
+
|
52
|
+
@JsonProperty
|
53
|
+
public Optional<String> getDestPrefix() {
|
54
|
+
return destPrefix;
|
55
|
+
}
|
56
|
+
|
57
|
+
@JsonProperty
|
58
|
+
public void setDestPrefix(Optional<String> destPrefix) {
|
59
|
+
this.destPrefix = destPrefix;
|
60
|
+
}
|
61
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
package org.embulk.output.snowflake;
|
2
|
+
|
3
|
+
import com.google.common.base.Optional;
|
4
|
+
import org.embulk.output.SnowflakeOutputPlugin;
|
5
|
+
|
6
|
+
import java.text.SimpleDateFormat;
|
7
|
+
import java.util.Date;
|
8
|
+
|
9
|
+
public class StageIdentifierHolder {
|
10
|
+
private static final String pattern = "yyyyMMdd";
|
11
|
+
private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
|
12
|
+
private static final String date = simpleDateFormat.format(new Date());
|
13
|
+
private static final String salt = SnowflakeUtils.randomString(6);
|
14
|
+
private static final String snowflakeStageName = "embulk_snowflake_" + date + salt;
|
15
|
+
private static final String snowflakeDestPrefix = date + "_" + salt;
|
16
|
+
|
17
|
+
public static StageIdentifier getStageIdentifier(SnowflakeOutputPlugin.SnowflakePluginTask t){
|
18
|
+
return new StageIdentifier(t.getDatabase(), t.getSchema(), snowflakeStageName, Optional.of(snowflakeDestPrefix));
|
19
|
+
}
|
20
|
+
}
|
metadata
CHANGED
@@ -1,33 +1,75 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-output-snowflake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- giwa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
11
|
+
date: 2020-11-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '1.0'
|
19
|
+
name: bundler
|
20
|
+
prerelease: false
|
21
|
+
type: :development
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '12.0'
|
33
|
+
name: rake
|
34
|
+
prerelease: false
|
35
|
+
type: :development
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '12.0'
|
41
|
+
description: Dumps records to Snowflake.
|
14
42
|
email:
|
15
|
-
-
|
43
|
+
- ugw.gi.world@gmail.com
|
16
44
|
executables: []
|
17
45
|
extensions: []
|
18
46
|
extra_rdoc_files: []
|
19
47
|
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- LICENSE.txt
|
20
50
|
- README.md
|
21
51
|
- build.gradle
|
22
|
-
- classpath/embulk-output-jdbc-0.
|
23
|
-
- classpath/embulk-output-snowflake-0.
|
52
|
+
- classpath/embulk-output-jdbc-0.8.7.jar
|
53
|
+
- classpath/embulk-output-snowflake-0.2.0.jar
|
54
|
+
- config/checkstyle/checkstyle.xml
|
55
|
+
- config/checkstyle/default.xml
|
56
|
+
- default_jdbc_driver/snowflake-jdbc-3.12.8.jar
|
57
|
+
- gradle/wrapper/gradle-wrapper.jar
|
58
|
+
- gradle/wrapper/gradle-wrapper.properties
|
59
|
+
- gradlew
|
60
|
+
- gradlew.bat
|
24
61
|
- lib/embulk/output/snowflake.rb
|
25
62
|
- src/main/java/org/embulk/output/SnowflakeOutputPlugin.java
|
63
|
+
- src/main/java/org/embulk/output/snowflake/SnowflakeCopyBatchInsert.java
|
26
64
|
- src/main/java/org/embulk/output/snowflake/SnowflakeOutputConnection.java
|
27
65
|
- src/main/java/org/embulk/output/snowflake/SnowflakeOutputConnector.java
|
28
|
-
|
66
|
+
- src/main/java/org/embulk/output/snowflake/SnowflakeUtils.java
|
67
|
+
- src/main/java/org/embulk/output/snowflake/StageIdentifier.java
|
68
|
+
- src/main/java/org/embulk/output/snowflake/StageIdentifierHolder.java
|
69
|
+
- src/test/java/org/embulk/output/snowflake/TestSnowflakeOutputPlugin.java
|
70
|
+
homepage: https://github.com/trocco-io/embulk-output-snowflake
|
29
71
|
licenses:
|
30
|
-
-
|
72
|
+
- MIT
|
31
73
|
metadata: {}
|
32
74
|
post_install_message:
|
33
75
|
rdoc_options: []
|
@@ -45,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
45
87
|
version: '0'
|
46
88
|
requirements: []
|
47
89
|
rubyforge_project:
|
48
|
-
rubygems_version: 2.
|
90
|
+
rubygems_version: 2.6.13
|
49
91
|
signing_key:
|
50
92
|
specification_version: 4
|
51
93
|
summary: Snowflake output plugin for Embulk
|
Binary file
|
Binary file
|