embulk-parser-avro 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/LICENSE.txt +21 -0
- data/README.md +88 -0
- data/build.gradle +96 -0
- data/config/checkstyle/checkstyle.xml +128 -0
- data/config/checkstyle/default.xml +108 -0
- data/example/.gitignore +3 -0
- data/example/example.yml +22 -0
- data/example/generate.rb +94 -0
- data/example/item.avsc +27 -0
- data/example/items.avro +0 -0
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/gradlew +160 -0
- data/gradlew.bat +90 -0
- data/lib/embulk/guess/avro.rb +61 -0
- data/lib/embulk/parser/avro.rb +3 -0
- data/src/main/java/org/embulk/parser/avro/AvroColumnOption.java +16 -0
- data/src/main/java/org/embulk/parser/avro/AvroParserPlugin.java +93 -0
- data/src/main/java/org/embulk/parser/avro/getter/AvroGenericDataConverter.java +72 -0
- data/src/main/java/org/embulk/parser/avro/getter/BaseColumnGetter.java +83 -0
- data/src/main/java/org/embulk/parser/avro/getter/BooleanColumnGetter.java +37 -0
- data/src/main/java/org/embulk/parser/avro/getter/ColumnGetterFactory.java +63 -0
- data/src/main/java/org/embulk/parser/avro/getter/DoubleColumnGetter.java +58 -0
- data/src/main/java/org/embulk/parser/avro/getter/FloatColumnGetter.java +58 -0
- data/src/main/java/org/embulk/parser/avro/getter/GenericDataColumnGetter.java +34 -0
- data/src/main/java/org/embulk/parser/avro/getter/IntegerColumnGetter.java +57 -0
- data/src/main/java/org/embulk/parser/avro/getter/LongColumnGetter.java +58 -0
- data/src/main/java/org/embulk/parser/avro/getter/StringColumnGetter.java +85 -0
- data/src/test/java/org/embulk/parser/avro/TestAvroParserPlugin.java +145 -0
- data/src/test/resources/org/embulk/parser/avro/item.avsc +27 -0
- data/src/test/resources/org/embulk/parser/avro/items.avro +0 -0
- metadata +112 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
package org.embulk.parser.avro;
|
2
|
+
|
3
|
+
import org.embulk.config.Config;
|
4
|
+
import org.embulk.config.ConfigDefault;
|
5
|
+
import org.embulk.config.Task;
|
6
|
+
import org.embulk.spi.type.Type;
|
7
|
+
|
8
|
+
import com.google.common.base.Optional;
|
9
|
+
|
10
|
+
public interface AvroColumnOption
|
11
|
+
extends Task
|
12
|
+
{
|
13
|
+
@Config("type")
|
14
|
+
@ConfigDefault("null")
|
15
|
+
Optional<Type> getType();
|
16
|
+
}
|
@@ -0,0 +1,93 @@
|
|
1
|
+
package org.embulk.parser.avro;
|
2
|
+
|
3
|
+
import com.google.common.collect.ImmutableMap;
|
4
|
+
import org.apache.avro.file.DataFileStream;
|
5
|
+
import org.apache.avro.generic.GenericDatumReader;
|
6
|
+
import org.apache.avro.generic.GenericRecord;
|
7
|
+
import org.apache.avro.io.DatumReader;
|
8
|
+
import org.embulk.config.Config;
|
9
|
+
import org.embulk.config.ConfigSource;
|
10
|
+
import org.embulk.config.Task;
|
11
|
+
import org.embulk.config.TaskSource;
|
12
|
+
import org.embulk.parser.avro.getter.BaseColumnGetter;
|
13
|
+
import org.embulk.parser.avro.getter.ColumnGetterFactory;
|
14
|
+
import org.embulk.spi.Column;
|
15
|
+
import org.embulk.spi.Exec;
|
16
|
+
import org.embulk.spi.FileInput;
|
17
|
+
import org.embulk.spi.PageBuilder;
|
18
|
+
import org.embulk.spi.PageOutput;
|
19
|
+
import org.embulk.spi.ParserPlugin;
|
20
|
+
import org.embulk.spi.Schema;
|
21
|
+
import org.embulk.spi.SchemaConfig;
|
22
|
+
import org.embulk.spi.time.TimestampParser;
|
23
|
+
import org.embulk.spi.unit.LocalFile;
|
24
|
+
import org.embulk.spi.util.FileInputInputStream;
|
25
|
+
import org.embulk.spi.util.Timestamps;
|
26
|
+
|
27
|
+
import java.io.File;
|
28
|
+
import java.io.IOException;
|
29
|
+
import java.util.List;
|
30
|
+
|
31
|
+
public class AvroParserPlugin
|
32
|
+
implements ParserPlugin
|
33
|
+
{
|
34
|
+
public interface PluginTask
|
35
|
+
extends Task, TimestampParser.Task
|
36
|
+
{
|
37
|
+
@Config("columns")
|
38
|
+
public SchemaConfig getColumns();
|
39
|
+
|
40
|
+
@Config("avsc")
|
41
|
+
LocalFile getAvsc();
|
42
|
+
}
|
43
|
+
|
44
|
+
@Override
|
45
|
+
public void transaction(ConfigSource config, ParserPlugin.Control control)
|
46
|
+
{
|
47
|
+
PluginTask task = config.loadConfig(PluginTask.class);
|
48
|
+
|
49
|
+
Schema schema = task.getColumns().toSchema();
|
50
|
+
|
51
|
+
control.run(task.dump(), schema);
|
52
|
+
}
|
53
|
+
|
54
|
+
@Override
|
55
|
+
public void run(TaskSource taskSource, Schema schema,
|
56
|
+
FileInput input, PageOutput output)
|
57
|
+
{
|
58
|
+
PluginTask task = taskSource.loadTask(PluginTask.class);
|
59
|
+
File avsc = task.getAvsc().getFile();
|
60
|
+
List<Column> columns = schema.getColumns();
|
61
|
+
final TimestampParser[] timestampParsers = Timestamps.newTimestampColumnParsers(task, task.getColumns());
|
62
|
+
|
63
|
+
try (FileInputInputStream is = new FileInputInputStream(input); final PageBuilder pageBuilder = new PageBuilder(Exec.getBufferAllocator(), schema, output)) {
|
64
|
+
org.apache.avro.Schema avroSchema = new org.apache.avro.Schema.Parser().parse(avsc);
|
65
|
+
ColumnGetterFactory factory = new ColumnGetterFactory(avroSchema, pageBuilder, timestampParsers);
|
66
|
+
ImmutableMap.Builder<String, BaseColumnGetter> columnGettersBuilder = ImmutableMap.builder();
|
67
|
+
for (Column column : columns) {
|
68
|
+
BaseColumnGetter columnGetter = factory.newColumnGetter(column);
|
69
|
+
columnGettersBuilder.put(column.getName(), columnGetter);
|
70
|
+
}
|
71
|
+
ImmutableMap<String, BaseColumnGetter> columnGetters = columnGettersBuilder.build();
|
72
|
+
DatumReader<GenericRecord> reader = new GenericDatumReader<>(avroSchema);
|
73
|
+
GenericRecord record = null;
|
74
|
+
while (is.nextFile()) {
|
75
|
+
DataFileStream<GenericRecord> ds = new DataFileStream<>(is, reader);
|
76
|
+
while (ds.hasNext()) {
|
77
|
+
record = ds.next(record);
|
78
|
+
for (Column column : columns) {
|
79
|
+
BaseColumnGetter columnGetter = columnGetters.get(column.getName());
|
80
|
+
columnGetter.setValue(record.get(column.getName()));
|
81
|
+
column.visit(columnGetter);
|
82
|
+
}
|
83
|
+
pageBuilder.addRecord();
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
pageBuilder.finish();
|
88
|
+
}
|
89
|
+
catch (IOException e) {
|
90
|
+
throw new RuntimeException(e);
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
package org.embulk.parser.avro.getter;
|
2
|
+
|
3
|
+
import org.apache.avro.Schema;
|
4
|
+
import org.apache.avro.generic.GenericData;
|
5
|
+
import org.apache.avro.util.Utf8;
|
6
|
+
import org.msgpack.value.Value;
|
7
|
+
import org.msgpack.value.ValueFactory;
|
8
|
+
|
9
|
+
import java.util.ArrayList;
|
10
|
+
import java.util.HashMap;
|
11
|
+
import java.util.List;
|
12
|
+
import java.util.Map;
|
13
|
+
import java.util.Set;
|
14
|
+
|
15
|
+
public class AvroGenericDataConverter {
|
16
|
+
public static Value convert(Object genericData)
|
17
|
+
{
|
18
|
+
return toValue(genericData);
|
19
|
+
}
|
20
|
+
|
21
|
+
private static Value toValue(Object rawValue)
|
22
|
+
{
|
23
|
+
if (rawValue instanceof Utf8) {
|
24
|
+
return ValueFactory.newString(rawValue.toString());
|
25
|
+
} else if (rawValue instanceof Integer) {
|
26
|
+
return ValueFactory.newInteger((Integer)rawValue);
|
27
|
+
} else if (rawValue instanceof Long) {
|
28
|
+
return ValueFactory.newInteger((Long)rawValue);
|
29
|
+
} else if (rawValue instanceof Float) {
|
30
|
+
return ValueFactory.newFloat((Float)rawValue);
|
31
|
+
} else if (rawValue instanceof Double) {
|
32
|
+
return ValueFactory.newFloat((Double)rawValue);
|
33
|
+
} else if (rawValue instanceof Boolean) {
|
34
|
+
return ValueFactory.newBoolean((Boolean)rawValue);
|
35
|
+
} else if (rawValue instanceof GenericData.EnumSymbol) {
|
36
|
+
return ValueFactory.newString(rawValue.toString());
|
37
|
+
} else if (rawValue instanceof GenericData.Array) {
|
38
|
+
List<Value> list = new ArrayList<>();
|
39
|
+
for (Object item : (GenericData.Array)rawValue) {
|
40
|
+
list.add(toValue(item));
|
41
|
+
}
|
42
|
+
return ValueFactory.newArray(list);
|
43
|
+
} else if (rawValue instanceof GenericData.Record) {
|
44
|
+
Map<Value, Value> map = new HashMap<>();
|
45
|
+
GenericData.Record casted = (GenericData.Record) rawValue;
|
46
|
+
for (Schema.Field field : casted.getSchema().getFields()) {
|
47
|
+
Object val = casted.get(field.name());
|
48
|
+
Value keyValue = ValueFactory.newString(field.name());
|
49
|
+
Value valValue = toValue(val);
|
50
|
+
map.put(keyValue, valValue);
|
51
|
+
}
|
52
|
+
return ValueFactory.newMap(map);
|
53
|
+
} else if (rawValue instanceof HashMap) {
|
54
|
+
Map<Value, Value> map = new HashMap<>();
|
55
|
+
HashMap casted = (HashMap) rawValue;
|
56
|
+
Set entries = casted.entrySet();
|
57
|
+
for (Object entry : entries) {
|
58
|
+
Map.Entry et = (Map.Entry) entry;
|
59
|
+
Utf8 key = (Utf8) (et.getKey());
|
60
|
+
Object val = et.getValue();
|
61
|
+
Value keyValue = toValue(key);
|
62
|
+
Value valValue = toValue(val);
|
63
|
+
map.put(keyValue, valValue);
|
64
|
+
}
|
65
|
+
return ValueFactory.newMap(map);
|
66
|
+
} else if (rawValue == null) {
|
67
|
+
return ValueFactory.newNil();
|
68
|
+
} else {
|
69
|
+
throw new RuntimeException("Unknown type");
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
@@ -0,0 +1,83 @@
|
|
1
|
+
package org.embulk.parser.avro.getter;
|
2
|
+
|
3
|
+
import org.embulk.spi.Column;
|
4
|
+
import org.embulk.spi.ColumnVisitor;
|
5
|
+
import org.embulk.spi.DataException;
|
6
|
+
import org.embulk.spi.PageBuilder;
|
7
|
+
import org.embulk.spi.time.TimestampParser;
|
8
|
+
|
9
|
+
public class BaseColumnGetter implements ColumnVisitor {
|
10
|
+
protected final PageBuilder pageBuilder;
|
11
|
+
protected final TimestampParser[] timestampParsers;
|
12
|
+
protected Object value;
|
13
|
+
|
14
|
+
public BaseColumnGetter(PageBuilder pageBuilder, TimestampParser[] timestampParsers) {
|
15
|
+
this.pageBuilder = pageBuilder;
|
16
|
+
this.timestampParsers = timestampParsers;
|
17
|
+
}
|
18
|
+
|
19
|
+
public void setValue(Object value)
|
20
|
+
{
|
21
|
+
this.value = value;
|
22
|
+
}
|
23
|
+
|
24
|
+
@Override
|
25
|
+
public void booleanColumn(Column column)
|
26
|
+
{
|
27
|
+
if (value == null) {
|
28
|
+
pageBuilder.setNull(column);
|
29
|
+
} else {
|
30
|
+
throw new DataException(String.format("cannot convert value from %s", column.getType()));
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
@Override
|
35
|
+
public void longColumn(Column column)
|
36
|
+
{
|
37
|
+
if (value == null) {
|
38
|
+
pageBuilder.setNull(column);
|
39
|
+
} else {
|
40
|
+
throw new DataException(String.format("cannot convert value from %s", column.getType()));
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
@Override
|
45
|
+
public void doubleColumn(Column column)
|
46
|
+
{
|
47
|
+
if (value == null) {
|
48
|
+
pageBuilder.setNull(column);
|
49
|
+
} else {
|
50
|
+
throw new DataException(String.format("cannot convert value from %s", column.getType()));
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
@Override
|
55
|
+
public void stringColumn(Column column)
|
56
|
+
{
|
57
|
+
if (value == null) {
|
58
|
+
pageBuilder.setNull(column);
|
59
|
+
} else {
|
60
|
+
throw new DataException(String.format("cannot convert value from %s", column.getType()));
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
@Override
|
65
|
+
public void timestampColumn(Column column)
|
66
|
+
{
|
67
|
+
if (value == null) {
|
68
|
+
pageBuilder.setNull(column);
|
69
|
+
} else {
|
70
|
+
throw new DataException(String.format("cannot convert value from %s", column.getType()));
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
@Override
|
75
|
+
public void jsonColumn(Column column)
|
76
|
+
{
|
77
|
+
if (value == null) {
|
78
|
+
pageBuilder.setNull(column);
|
79
|
+
} else {
|
80
|
+
throw new DataException(String.format("cannot convert value from %s", column.getType()));
|
81
|
+
}
|
82
|
+
}
|
83
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
package org.embulk.parser.avro.getter;
|
2
|
+
|
3
|
+
import org.embulk.spi.Column;
|
4
|
+
import org.embulk.spi.PageBuilder;
|
5
|
+
import org.embulk.spi.time.TimestampParser;
|
6
|
+
|
7
|
+
public class BooleanColumnGetter extends BaseColumnGetter {
|
8
|
+
protected Boolean value;
|
9
|
+
|
10
|
+
public BooleanColumnGetter(PageBuilder pageBuilder, TimestampParser[] timestampParsers) {
|
11
|
+
super(pageBuilder, timestampParsers);
|
12
|
+
}
|
13
|
+
|
14
|
+
@Override
|
15
|
+
public void setValue(Object value)
|
16
|
+
{
|
17
|
+
this.value = (Boolean) value;
|
18
|
+
}
|
19
|
+
|
20
|
+
@Override
|
21
|
+
public void booleanColumn(Column column) {
|
22
|
+
if (value == null) {
|
23
|
+
pageBuilder.setNull(column);
|
24
|
+
} else {
|
25
|
+
pageBuilder.setBoolean(column, value);
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
@Override
|
30
|
+
public void stringColumn(Column column) {
|
31
|
+
if (value == null) {
|
32
|
+
pageBuilder.setNull(column);
|
33
|
+
} else {
|
34
|
+
pageBuilder.setString(column, value.toString());
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
package org.embulk.parser.avro.getter;
|
2
|
+
|
3
|
+
import org.embulk.spi.Column;
|
4
|
+
import org.embulk.spi.DataException;
|
5
|
+
import org.embulk.spi.PageBuilder;
|
6
|
+
import org.embulk.spi.time.TimestampParser;
|
7
|
+
|
8
|
+
public class ColumnGetterFactory {
|
9
|
+
private org.apache.avro.Schema avroSchema;
|
10
|
+
private PageBuilder pageBuilder;
|
11
|
+
private TimestampParser[] timestampParsers;
|
12
|
+
|
13
|
+
public ColumnGetterFactory(org.apache.avro.Schema avroSchema, PageBuilder pageBuilder, TimestampParser[] timestampParsers)
|
14
|
+
{
|
15
|
+
this.avroSchema = avroSchema;
|
16
|
+
this.pageBuilder = pageBuilder;
|
17
|
+
this.timestampParsers = timestampParsers;
|
18
|
+
}
|
19
|
+
|
20
|
+
public BaseColumnGetter newColumnGetter(Column column)
|
21
|
+
{
|
22
|
+
org.apache.avro.Schema fieldSchema = avroSchema.getField(column.getName()).schema();
|
23
|
+
switch (fieldSchema.getType().getName()) {
|
24
|
+
case "union" :
|
25
|
+
String typeName = "";
|
26
|
+
for (org.apache.avro.Schema type : fieldSchema.getTypes()) {
|
27
|
+
if (!type.getName().equals("null")) {
|
28
|
+
typeName = type.getName();
|
29
|
+
break;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
return getColumnGetterFromTypeName(typeName);
|
33
|
+
default :
|
34
|
+
return getColumnGetterFromTypeName(fieldSchema.getType().getName());
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
private BaseColumnGetter getColumnGetterFromTypeName(String typeName)
|
39
|
+
{
|
40
|
+
switch (typeName) {
|
41
|
+
case "string":
|
42
|
+
case "enum":
|
43
|
+
return new StringColumnGetter(pageBuilder, timestampParsers);
|
44
|
+
case "int":
|
45
|
+
return new IntegerColumnGetter(pageBuilder, timestampParsers);
|
46
|
+
case "long":
|
47
|
+
return new LongColumnGetter(pageBuilder, timestampParsers);
|
48
|
+
case "float":
|
49
|
+
return new FloatColumnGetter(pageBuilder, timestampParsers);
|
50
|
+
case "double":
|
51
|
+
return new DoubleColumnGetter(pageBuilder, timestampParsers);
|
52
|
+
case "boolean":
|
53
|
+
return new BooleanColumnGetter(pageBuilder, timestampParsers);
|
54
|
+
case "array":
|
55
|
+
case "map":
|
56
|
+
case "record":
|
57
|
+
return new GenericDataColumnGetter(pageBuilder, timestampParsers);
|
58
|
+
case "byte":
|
59
|
+
default:
|
60
|
+
throw new DataException(String.format("%s is not supported", typeName));
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
package org.embulk.parser.avro.getter;
|
2
|
+
|
3
|
+
import org.embulk.spi.Column;
|
4
|
+
import org.embulk.spi.PageBuilder;
|
5
|
+
import org.embulk.spi.time.Timestamp;
|
6
|
+
import org.embulk.spi.time.TimestampParser;
|
7
|
+
|
8
|
+
public class DoubleColumnGetter extends BaseColumnGetter {
|
9
|
+
protected Double value;
|
10
|
+
|
11
|
+
public DoubleColumnGetter(PageBuilder pageBuilder, TimestampParser[] timestampParsers) {
|
12
|
+
super(pageBuilder, timestampParsers);
|
13
|
+
}
|
14
|
+
|
15
|
+
@Override
|
16
|
+
public void setValue(Object value)
|
17
|
+
{
|
18
|
+
this.value = (Double) value;
|
19
|
+
}
|
20
|
+
|
21
|
+
@Override
|
22
|
+
public void longColumn(Column column) {
|
23
|
+
if (value == null) {
|
24
|
+
pageBuilder.setNull(column);
|
25
|
+
} else {
|
26
|
+
pageBuilder.setLong(column, value.longValue());
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
@Override
|
31
|
+
public void doubleColumn(Column column) {
|
32
|
+
if (value == null) {
|
33
|
+
pageBuilder.setNull(column);
|
34
|
+
} else {
|
35
|
+
pageBuilder.setDouble(column, value);
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
@Override
|
40
|
+
public void stringColumn(Column column) {
|
41
|
+
if (value == null) {
|
42
|
+
pageBuilder.setNull(column);
|
43
|
+
} else {
|
44
|
+
pageBuilder.setString(column, value.toString());
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
@Override
|
49
|
+
public void timestampColumn(Column column) {
|
50
|
+
if (this.value == null) {
|
51
|
+
pageBuilder.setNull(column);
|
52
|
+
}
|
53
|
+
else {
|
54
|
+
long milliSec = (long) (value * 1000);
|
55
|
+
pageBuilder.setTimestamp(column, Timestamp.ofEpochMilli(milliSec));
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
package org.embulk.parser.avro.getter;
|
2
|
+
|
3
|
+
import org.embulk.spi.Column;
|
4
|
+
import org.embulk.spi.PageBuilder;
|
5
|
+
import org.embulk.spi.time.Timestamp;
|
6
|
+
import org.embulk.spi.time.TimestampParser;
|
7
|
+
|
8
|
+
public class FloatColumnGetter extends BaseColumnGetter {
|
9
|
+
protected Float value;
|
10
|
+
|
11
|
+
public FloatColumnGetter(PageBuilder pageBuilder, TimestampParser[] timestampParsers) {
|
12
|
+
super(pageBuilder, timestampParsers);
|
13
|
+
}
|
14
|
+
|
15
|
+
@Override
|
16
|
+
public void setValue(Object value)
|
17
|
+
{
|
18
|
+
this.value = (Float) value;
|
19
|
+
}
|
20
|
+
|
21
|
+
@Override
|
22
|
+
public void longColumn(Column column) {
|
23
|
+
if (value == null) {
|
24
|
+
pageBuilder.setNull(column);
|
25
|
+
} else {
|
26
|
+
pageBuilder.setLong(column, value.longValue());
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
@Override
|
31
|
+
public void doubleColumn(Column column) {
|
32
|
+
if (value == null) {
|
33
|
+
pageBuilder.setNull(column);
|
34
|
+
} else {
|
35
|
+
pageBuilder.setDouble(column, value.doubleValue());
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
@Override
|
40
|
+
public void stringColumn(Column column) {
|
41
|
+
if (value == null) {
|
42
|
+
pageBuilder.setNull(column);
|
43
|
+
} else {
|
44
|
+
pageBuilder.setString(column, value.toString());
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
@Override
|
49
|
+
public void timestampColumn(Column column) {
|
50
|
+
if (this.value == null) {
|
51
|
+
pageBuilder.setNull(column);
|
52
|
+
}
|
53
|
+
else {
|
54
|
+
long milliSec = (long) (value * 1000);
|
55
|
+
pageBuilder.setTimestamp(column, Timestamp.ofEpochMilli(milliSec));
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|