embulk-parser-firebase_avro 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/build.gradle +1 -1
- data/build.sbt +21 -18
- data/project/plugins.sbt +1 -1
- data/settings.gradle +1 -0
- data/src/main/scala/org/embulk/parser/firebase_avro/FirebaseAvroParserPlugin.scala +32 -32
- data/src/main/scala/org/embulk/parser/firebase_avro/Parser.scala +8 -3
- data/src/main/scala/org/embulk/parser/firebase_avro/define/root/Event_Dim.scala +4 -0
- data/src/test/scala/org/embulk/parser/firebase_avro/column/ColumnsTest.scala +2 -2
- data/src/test/scala/org/embulk/parser/firebase_avro/json/event_dim/EventParmsJsonSerializerTest.scala +6 -6
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4ac8ed35dad7dbbde18928b68dca357b9fc5784
|
4
|
+
data.tar.gz: 898d4040eaf4d63ed5b2a5dbd5de8d361a33c962
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a07439fba8c76371a24d7d981b637b5fb9aed5b45885f10280923c44bf968acb29d5f2ea8923a82848257a3621d68425514f17c81082a0b060e65479bba94be5
|
7
|
+
data.tar.gz: 2b2582964a00485b7067296a6bb12d72b90173e06c6cadc7a4b6bdf5e5ce08009500f0258e774f69c2ebab87c7a98f11e2f422faa4f96f376aa3f3c302120c80
|
data/build.gradle
CHANGED
data/build.sbt
CHANGED
@@ -1,29 +1,32 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
enablePlugins(ScalafmtPlugin)
|
2
|
+
|
3
|
+
lazy val root = (project in file(".")).settings(
|
4
|
+
inThisBuild(
|
5
|
+
List(
|
4
6
|
organization := "com.example",
|
5
7
|
scalaVersion := "2.11.11",
|
6
|
-
version
|
8
|
+
version := "0.1.0-SNAPSHOT"
|
7
9
|
)),
|
8
|
-
|
9
|
-
|
10
|
+
name := "embulk-parser-firebase_avro",
|
11
|
+
scalafmtOnCompile in ThisBuild := true,
|
12
|
+
scalafmtTestOnCompile in ThisBuild := true
|
13
|
+
)
|
10
14
|
|
11
15
|
enablePlugins(ScalafmtPlugin)
|
12
16
|
|
13
17
|
resolvers += Resolver.jcenterRepo
|
14
18
|
resolvers += Resolver.sonatypeRepo("releases")
|
15
19
|
|
16
|
-
|
17
20
|
lazy val circeVersion = "0.8.0"
|
18
21
|
libraryDependencies ++= Seq(
|
19
|
-
"com.sksamuel.avro4s"
|
20
|
-
"org.jruby"
|
21
|
-
"org.embulk"
|
22
|
-
"com.chuusai"
|
23
|
-
"io.circe"
|
24
|
-
"io.circe"
|
25
|
-
"org.scalacheck"
|
26
|
-
"org.scalatest"
|
27
|
-
"org.scalamock"
|
28
|
-
"com.github.alexarchambault" %% "scalacheck-shapeless_1.13"
|
29
|
-
)
|
22
|
+
"com.sksamuel.avro4s" %% "avro4s-core" % "1.6.4",
|
23
|
+
"org.jruby" % "jruby-complete" % "1.6.5",
|
24
|
+
"org.embulk" % "embulk-core" % "0.8.22",
|
25
|
+
"com.chuusai" %% "shapeless" % "2.3.2",
|
26
|
+
"io.circe" %% "circe-core" % circeVersion,
|
27
|
+
"io.circe" %% "circe-generic" % circeVersion,
|
28
|
+
"org.scalacheck" %% "scalacheck" % "1.13.4" % Test,
|
29
|
+
"org.scalatest" %% "scalatest" % "3.0.1" % Test,
|
30
|
+
"org.scalamock" %% "scalamock-scalatest-support" % "3.6.0" % Test,
|
31
|
+
"com.github.alexarchambault" %% "scalacheck-shapeless_1.13" % "1.1.5" % Test
|
32
|
+
)
|
data/project/plugins.sbt
CHANGED
data/settings.gradle
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rootProject.name = 'embulk-parser-firebase_avro'
|
@@ -1,11 +1,10 @@
|
|
1
1
|
package org.embulk.parser.firebase_avro
|
2
2
|
|
3
|
-
import
|
3
|
+
import com.google.common.io.ByteStreams
|
4
4
|
|
5
5
|
import scala.collection.JavaConverters._
|
6
6
|
import com.sksamuel.avro4s.AvroInputStream
|
7
7
|
import io.circe.Json
|
8
|
-
import org.apache.commons.compress.utils.IOUtils
|
9
8
|
import org.embulk.config.ConfigSource
|
10
9
|
import org.embulk.config.TaskSource
|
11
10
|
import org.embulk.parser.firebase_avro.column.Columns
|
@@ -22,45 +21,46 @@ object FirebaseAvroParserPlugin {
|
|
22
21
|
}
|
23
22
|
|
24
23
|
class FirebaseAvroParserPlugin extends ParserPlugin {
|
24
|
+
val logger = Exec.getLogger(classOf[FirebaseAvroParserPlugin])
|
25
25
|
override def transaction(config: ConfigSource, control: ParserPlugin.Control): Unit = {
|
26
26
|
val task = config.loadConfig(classOf[PluginTask])
|
27
27
|
control.run(task.dump, FirebaseAvroParserPlugin.buildColumn())
|
28
28
|
}
|
29
29
|
|
30
|
-
override def run(taskSource: TaskSource, schema: Schema, input: FileInput, output: PageOutput): Unit =
|
31
|
-
LoanPattern(new
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
override def run(taskSource: TaskSource, schema: Schema, input: FileInput, output: PageOutput): Unit = {
|
31
|
+
LoanPattern(new PageBuilder(Exec.getBufferAllocator, schema, output)) { pb =>
|
32
|
+
while (input.nextFile()) {
|
33
|
+
val bytes = ByteStreams.toByteArray(new FileInputInputStream(input))
|
34
|
+
AvroInputStream.data[Root](bytes).iterator().toList.foreach { record =>
|
35
|
+
addRecords(pb, record)
|
35
36
|
}
|
36
|
-
pb.finish()
|
37
37
|
}
|
38
|
+
pb.finish()
|
38
39
|
}
|
40
|
+
}
|
39
41
|
|
40
|
-
def addRecords(
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
pb.setNull(c)
|
62
|
-
}
|
63
|
-
pb.addRecord()
|
42
|
+
def addRecords(pb: PageBuilder, record: Root): Unit =
|
43
|
+
Parser(record).foreach { rows =>
|
44
|
+
rows.foreach {
|
45
|
+
case ValueHolder(c, Some(x: Int)) =>
|
46
|
+
pb.setLong(c, x)
|
47
|
+
case ValueHolder(c, Some(x: Long)) =>
|
48
|
+
pb.setLong(c, x)
|
49
|
+
case ValueHolder(c, Some(x: Double)) =>
|
50
|
+
pb.setDouble(c, x)
|
51
|
+
case ValueHolder(c, Some(x: Float)) =>
|
52
|
+
pb.setDouble(c, x)
|
53
|
+
case ValueHolder(c, Some(x: Boolean)) =>
|
54
|
+
pb.setBoolean(c, x)
|
55
|
+
case ValueHolder(c, Some(x: String)) =>
|
56
|
+
pb.setString(c, x)
|
57
|
+
case ValueHolder(c, Some(x: Json)) =>
|
58
|
+
pb.setJson(c, new JsonParser().parse(x.noSpaces))
|
59
|
+
case ValueHolder(c, Some(x: Timestamp)) =>
|
60
|
+
pb.setTimestamp(c, x)
|
61
|
+
case ValueHolder(c, None) =>
|
62
|
+
pb.setNull(c)
|
64
63
|
}
|
64
|
+
pb.addRecord()
|
65
65
|
}
|
66
66
|
}
|
@@ -12,9 +12,14 @@ object Parser {
|
|
12
12
|
|
13
13
|
def apply(record: Root): Seq[Seq[ValueHolder[_]]] = {
|
14
14
|
val userFields = userDims(record.user_dim.getOrElse(sys.error("could not get user")))
|
15
|
-
if (record.event_dim.isEmpty)
|
16
|
-
|
17
|
-
|
15
|
+
if (record.event_dim.isEmpty) {
|
16
|
+
record.copy(event_dim = List(Event_Dim.empty)).event_dim.map {
|
17
|
+
userFields ++ eventDims(_)
|
18
|
+
}
|
19
|
+
} else {
|
20
|
+
record.event_dim.map {
|
21
|
+
userFields ++ eventDims(_)
|
22
|
+
}
|
18
23
|
}
|
19
24
|
}
|
20
25
|
|
@@ -8,11 +8,11 @@ class ColumnsTest extends FlatSpec with MustMatchers {
|
|
8
8
|
"columuns" should "be indexing" in {
|
9
9
|
val columns = Columns()
|
10
10
|
val summery = columns.indices.sum
|
11
|
-
columns.map(_.embulkColumn).map(_.getIndex).sum should be
|
11
|
+
columns.map(_.embulkColumn).map(_.getIndex).sum should be(summery)
|
12
12
|
}
|
13
13
|
|
14
14
|
"columns" should "be finding" in {
|
15
|
-
Columns.find("user_dim"
|
15
|
+
Columns.find("user_dim", "first_open_timestamp_micros")
|
16
16
|
}
|
17
17
|
|
18
18
|
}
|
@@ -8,12 +8,12 @@ import org.scalatest._
|
|
8
8
|
class EventParmsJsonSerializerTest extends FlatSpec with MustMatchers {
|
9
9
|
|
10
10
|
"parameter" should "be encoding" in {
|
11
|
-
val string = Params(Option("key_string")
|
12
|
-
val int
|
13
|
-
val double = Params(Option("key_double")
|
14
|
-
val float
|
15
|
-
val given
|
16
|
-
val that
|
11
|
+
val string = Params(Option("key_string"), Option(Value(string_value = Some("abc"))))
|
12
|
+
val int = Params(Option("key_int"), Option(Value(int_value = Some(1))))
|
13
|
+
val double = Params(Option("key_double"), Option(Value(double_value = Some(10D))))
|
14
|
+
val float = Params(Option("key_float"), Option(Value(float_value = Some(10F))))
|
15
|
+
val given = List(string, int, double, float)
|
16
|
+
val that = EventParmsJsonSerializer(given).map(_.noSpaces)
|
17
17
|
that mustBe Some("{\"key_float\":10.0,\"key_int\":1,\"key_string\":\"abc\",\"key_double\":10.0}")
|
18
18
|
}
|
19
19
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-parser-firebase_avro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- smdmts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- lib/embulk/parser/firebase_avro.rb
|
60
60
|
- project/build.properties
|
61
61
|
- project/plugins.sbt
|
62
|
+
- settings.gradle
|
62
63
|
- src/main/scala/org/embulk/parser/firebase_avro/FirebaseAvroParserPlugin.scala
|
63
64
|
- src/main/scala/org/embulk/parser/firebase_avro/LoanPattern.scala
|
64
65
|
- src/main/scala/org/embulk/parser/firebase_avro/Parser.scala
|
@@ -99,7 +100,7 @@ files:
|
|
99
100
|
- classpath/circe-generic_2.11-0.8.0.jar
|
100
101
|
- classpath/circe-numbers_2.11-0.8.0.jar
|
101
102
|
- classpath/commons-compress-1.8.1.jar
|
102
|
-
- classpath/embulk-parser-firebase_avro-0.1.
|
103
|
+
- classpath/embulk-parser-firebase_avro-0.1.2.jar
|
103
104
|
- classpath/jackson-core-asl-1.9.13.jar
|
104
105
|
- classpath/jackson-mapper-asl-1.9.13.jar
|
105
106
|
- classpath/machinist_2.11-0.6.1.jar
|