embulk-output-kafka 0.1.3 → 0.1.8
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 +5 -5
- data/.circleci/config.yml +44 -0
- data/.github/dependabot.yml +11 -0
- data/README.md +6 -1
- data/build.gradle +29 -12
- data/docker-compose.yml +1 -1
- data/src/main/java/org/embulk/output/kafka/AvroFormatColumnVisitor.java +26 -10
- data/src/main/java/org/embulk/output/kafka/AvroFormatTransactionalPageOutput.java +13 -0
- data/src/main/java/org/embulk/output/kafka/JsonFormatColumnVisitor.java +27 -5
- data/src/main/java/org/embulk/output/kafka/JsonFormatTransactionalPageOutput.java +13 -0
- data/src/main/java/org/embulk/output/kafka/KafkaJsonSerializer.java +4 -0
- data/src/main/java/org/embulk/output/kafka/KafkaOutputColumnVisitor.java +62 -8
- data/src/main/java/org/embulk/output/kafka/KafkaOutputPlugin.java +82 -145
- data/src/main/java/org/embulk/output/kafka/KafkaTransactionalPageOutput.java +104 -0
- data/src/main/java/org/embulk/output/kafka/RecordProducerFactory.java +3 -3
- data/src/test/java/org/embulk/output/kafka/TestKafkaOutputPlugin.java +384 -0
- data/src/test/resources/config_complex.yml +9 -28
- data/src/test/resources/config_complex_avro.yml +23 -42
- data/src/test/resources/config_simple.yml +5 -22
- data/src/test/resources/config_simple_avro.yml +14 -32
- data/src/test/resources/config_simple_avro_avsc_file.yml +7 -25
- data/src/test/resources/config_with_column_for_deletion.yml +7 -0
- data/src/test/resources/config_with_column_for_deletion_avro.yml +18 -0
- data/src/test/resources/config_with_key_column.yml +6 -23
- data/src/test/resources/config_with_partition_column.yml +6 -0
- data/src/test/resources/in1.csv +4 -4
- data/src/test/resources/in_complex.csv +4 -4
- data/src/test/resources/in_with_deletion.csv +4 -0
- metadata +30 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cb0e6dfc4b8b49b93fb6966948e8930e5785cf5a2a89fc5a8f17c80a4e7865c1
|
4
|
+
data.tar.gz: 18cb578eba9423c490e7416c906054f8401301b977e796c271182f593dc08563
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84a080d3cc49d30ad04802162e94de0072aac96d2562649c34cb1623e7734f783e96deeb8082c81ce965b36520c21be122cdf0e292a55697c9d2c89fd767f551
|
7
|
+
data.tar.gz: 4eb1b72cb705b2eb473ae76f02085987b4f55a37d9ba7048789ea3133e8056850813d39cfb86b2d4f7482b31fbbb67f5387b2c3a730dfb0bffd2c5f9015d16d0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Java Gradle CircleCI 2.0 configuration file
|
2
|
+
#
|
3
|
+
# Check https://circleci.com/docs/2.0/language-java/ for more details
|
4
|
+
#
|
5
|
+
version: 2
|
6
|
+
jobs:
|
7
|
+
build:
|
8
|
+
docker:
|
9
|
+
# specify the version you desire here
|
10
|
+
- image: circleci/openjdk:8-jdk
|
11
|
+
|
12
|
+
# Specify service dependencies here if necessary
|
13
|
+
# CircleCI maintains a library of pre-built images
|
14
|
+
# documented at https://circleci.com/docs/2.0/circleci-images/
|
15
|
+
# - image: circleci/postgres:9.4
|
16
|
+
|
17
|
+
working_directory: ~/repo
|
18
|
+
|
19
|
+
environment:
|
20
|
+
# Customize the JVM maximum heap limit
|
21
|
+
JVM_OPTS: -Xmx3200m
|
22
|
+
TERM: dumb
|
23
|
+
|
24
|
+
steps:
|
25
|
+
- checkout
|
26
|
+
|
27
|
+
# Download and cache dependencies
|
28
|
+
- restore_cache:
|
29
|
+
keys:
|
30
|
+
- v1-dependencies-{{ checksum "build.gradle" }}
|
31
|
+
# fallback to using the latest cache if no exact match is found
|
32
|
+
- v1-dependencies-
|
33
|
+
|
34
|
+
- run: ./gradlew dependencies
|
35
|
+
|
36
|
+
- save_cache:
|
37
|
+
paths:
|
38
|
+
- ~/.gradle
|
39
|
+
key: v1-dependencies-{{ checksum "build.gradle" }}
|
40
|
+
|
41
|
+
# run tests!
|
42
|
+
- run: ./gradlew test
|
43
|
+
- store_test_results:
|
44
|
+
path: build/test-results
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
3
|
+
# Please see the documentation for all configuration options:
|
4
|
+
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
5
|
+
|
6
|
+
version: 2
|
7
|
+
updates:
|
8
|
+
- package-ecosystem: "gradle" # See documentation for possible values
|
9
|
+
directory: "/" # Location of package manifests
|
10
|
+
schedule:
|
11
|
+
interval: "weekly"
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# Kafka output plugin for Embulk
|
2
|
+
[](https://circleci.com/gh/joker1007/embulk-output-kafka)
|
2
3
|
|
3
4
|
## Overview
|
4
5
|
|
@@ -18,6 +19,8 @@
|
|
18
19
|
- **avsc**: inline avro schema config (json, default: `null`)
|
19
20
|
- **ignore_columns**: remove columns from output (array(string), default: `[]`)
|
20
21
|
- **key_column_name**: use column value as record key (string, default: `null`, if this parameter is null, set random number as record key, and it can use column in `ignore_columns`)
|
22
|
+
- **partition_column_name**: use column value as partition id (string, default: `null`, this value is prefer to `key_column_name`, and if partition_column value is null, use key_column for partitioning)
|
23
|
+
- **column_for_deletion**: Determine to delete (string, default: `null`, `column_for_deletion` column must be boolean. If the value of the column is `true`, KafkaProducer sends `null` value to a Kafka Broker.)
|
21
24
|
- **record_batch_size**: kafka producer record batch size (integer, default: `1000`)
|
22
25
|
- **acks**: kafka producer require acks (string, default: `"1"`)
|
23
26
|
- **retries**: kafka producer max retry count (integer, default: `1`)
|
@@ -27,7 +30,9 @@
|
|
27
30
|
If use `avro_with_schema_registry` format, following configs are required.
|
28
31
|
|
29
32
|
- **schema_registry_url**
|
30
|
-
|
33
|
+
|
34
|
+
If avsc and avsc_file are null, embulk-output-kafka fetch a schema from schema registry.
|
35
|
+
But currently, embulk-output-kafka supports only TopicNameStrategy.
|
31
36
|
|
32
37
|
## Example
|
33
38
|
|
data/build.gradle
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
plugins {
|
2
|
-
id "com.jfrog.bintray" version "1.
|
3
|
-
id "com.github.jruby-gradle.base" version "1.
|
2
|
+
id "com.jfrog.bintray" version "1.8.5"
|
3
|
+
id "com.github.jruby-gradle.base" version "1.6.0"
|
4
4
|
id "java"
|
5
5
|
id "checkstyle"
|
6
6
|
}
|
@@ -17,26 +17,43 @@ configurations {
|
|
17
17
|
provided
|
18
18
|
}
|
19
19
|
|
20
|
-
version = "0.1.
|
20
|
+
version = "0.1.8"
|
21
21
|
|
22
22
|
sourceCompatibility = 1.8
|
23
23
|
targetCompatibility = 1.8
|
24
24
|
|
25
25
|
dependencies {
|
26
|
-
compile "org.embulk:embulk-core:0.9.
|
27
|
-
provided "org.embulk:embulk-core:0.9.
|
26
|
+
compile "org.embulk:embulk-core:0.9.22"
|
27
|
+
provided "org.embulk:embulk-core:0.9.22"
|
28
28
|
// compile "YOUR_JAR_DEPENDENCY_GROUP:YOUR_JAR_DEPENDENCY_MODULE:YOUR_JAR_DEPENDENCY_VERSION"
|
29
|
-
testCompile "junit:junit:4.
|
30
|
-
testCompile "org.embulk:embulk-test:0.9.
|
31
|
-
testCompile "org.embulk:embulk-standards:0.9.
|
29
|
+
testCompile "junit:junit:4.13"
|
30
|
+
testCompile "org.embulk:embulk-test:0.9.22"
|
31
|
+
testCompile "org.embulk:embulk-standards:0.9.22"
|
32
|
+
testCompile "org.embulk:embulk-deps-buffer:0.9.22"
|
32
33
|
|
33
|
-
compile
|
34
|
-
|
34
|
+
compile("org.apache.kafka:kafka-clients:2.5.1") {
|
35
|
+
exclude group: "org.slf4j", module: "slf4j-api"
|
35
36
|
}
|
36
|
-
compile("
|
37
|
+
compile("org.apache.avro:avro:1.10.0") {
|
38
|
+
exclude group: "com.fasterxml.jackson.core", module: "jackson-databind"
|
39
|
+
exclude group: "com.fasterxml.jackson.core", module: "jackson-annotations"
|
40
|
+
exclude group: "com.fasterxml.jackson.core", module: "jackson-core"
|
41
|
+
exclude group: "org.slf4j", module: "slf4j-api"
|
42
|
+
}
|
43
|
+
compile("io.confluent:kafka-avro-serializer:5.5.1") {
|
44
|
+
exclude group: "com.fasterxml.jackson.core", module: "jackson-databind"
|
45
|
+
exclude group: "com.fasterxml.jackson.core", module: "jackson-annotations"
|
46
|
+
exclude group: "com.fasterxml.jackson.core", module: "jackson-core"
|
47
|
+
exclude group: "org.slf4j", module: "slf4j-api"
|
37
48
|
}
|
38
49
|
|
39
|
-
testCompile
|
50
|
+
testCompile "com.salesforce.kafka.test:kafka-junit4:3.+"
|
51
|
+
testCompile("org.apache.kafka:kafka_2.12:2.5.+") {
|
52
|
+
exclude group: "com.fasterxml.jackson.core", module: "jackson-databind"
|
53
|
+
exclude group: "com.fasterxml.jackson.core", module: "jackson-annotations"
|
54
|
+
exclude group: "com.fasterxml.jackson.core", module: "jackson-core"
|
55
|
+
// exclude group: "com.fasterxml.jackson.dataformat", module: "jackson-dataformat-csv"
|
56
|
+
exclude group: "com.fasterxml.jackson.datatype", module: "jackson-datatype-jdk8"
|
40
57
|
}
|
41
58
|
}
|
42
59
|
|
data/docker-compose.yml
CHANGED
@@ -23,7 +23,7 @@ services:
|
|
23
23
|
KAFKA_BROKER_ID: 1
|
24
24
|
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
|
25
25
|
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
|
26
|
-
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://
|
26
|
+
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
|
27
27
|
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
|
28
28
|
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
|
29
29
|
|
@@ -14,21 +14,39 @@ import java.util.Objects;
|
|
14
14
|
import java.util.Optional;
|
15
15
|
import java.util.stream.Collectors;
|
16
16
|
|
17
|
-
public class AvroFormatColumnVisitor extends KafkaOutputColumnVisitor
|
17
|
+
public class AvroFormatColumnVisitor extends KafkaOutputColumnVisitor<GenericRecord>
|
18
18
|
{
|
19
19
|
private Schema avroSchema;
|
20
|
-
|
20
|
+
private GenericRecord genericRecord;
|
21
21
|
|
22
|
-
|
22
|
+
AvroFormatColumnVisitor(KafkaOutputPlugin.PluginTask task, PageReader pageReader, Schema avroSchema)
|
23
23
|
{
|
24
24
|
super(task, pageReader);
|
25
25
|
this.avroSchema = avroSchema;
|
26
|
-
|
26
|
+
}
|
27
|
+
|
28
|
+
@Override
|
29
|
+
public GenericRecord getRecord()
|
30
|
+
{
|
31
|
+
if (isDeletion()) {
|
32
|
+
return null;
|
33
|
+
}
|
34
|
+
|
35
|
+
return genericRecord;
|
36
|
+
}
|
37
|
+
|
38
|
+
@Override
|
39
|
+
void reset()
|
40
|
+
{
|
41
|
+
super.reset();
|
42
|
+
this.genericRecord = new GenericData.Record(avroSchema);
|
27
43
|
}
|
28
44
|
|
29
45
|
@Override
|
30
46
|
public void booleanColumn(Column column)
|
31
47
|
{
|
48
|
+
super.booleanColumn(column);
|
49
|
+
|
32
50
|
if (isIgnoreColumn(column)) {
|
33
51
|
return;
|
34
52
|
}
|
@@ -134,9 +152,8 @@ public class AvroFormatColumnVisitor extends KafkaOutputColumnVisitor
|
|
134
152
|
switch (avroSchema.getType()) {
|
135
153
|
case ARRAY:
|
136
154
|
if (value.isArrayValue()) {
|
137
|
-
return value.asArrayValue().list().stream().map(item ->
|
138
|
-
|
139
|
-
}).filter(Objects::nonNull).collect(Collectors.toList());
|
155
|
+
return value.asArrayValue().list().stream().map(item ->
|
156
|
+
convertMsgPackValueToAvroValue(avroSchema.getElementType(), item)).filter(Objects::nonNull).collect(Collectors.toList());
|
140
157
|
}
|
141
158
|
throw new RuntimeException(String.format("Schema mismatch: avro: %s, msgpack: %s", avroSchema.getType().getName(), value.getValueType().name()));
|
142
159
|
case MAP:
|
@@ -155,9 +172,8 @@ public class AvroFormatColumnVisitor extends KafkaOutputColumnVisitor
|
|
155
172
|
GenericRecord record = new GenericData.Record(avroSchema);
|
156
173
|
Map<Value, Value> valueMap = value.asMapValue().map();
|
157
174
|
for (org.apache.avro.Schema.Field field : avroSchema.getFields()) {
|
158
|
-
Optional.ofNullable(valueMap.get(ValueFactory.newString(field.name()))).ifPresent(v ->
|
159
|
-
|
160
|
-
});
|
175
|
+
Optional.ofNullable(valueMap.get(ValueFactory.newString(field.name()))).ifPresent(v ->
|
176
|
+
record.put(field.name(), convertMsgPackValueToAvroValue(field.schema(), v)));
|
161
177
|
}
|
162
178
|
return record;
|
163
179
|
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
package org.embulk.output.kafka;
|
2
|
+
|
3
|
+
import org.apache.avro.generic.GenericRecord;
|
4
|
+
import org.apache.kafka.clients.producer.KafkaProducer;
|
5
|
+
import org.embulk.spi.PageReader;
|
6
|
+
|
7
|
+
public class AvroFormatTransactionalPageOutput extends KafkaTransactionalPageOutput<Object, GenericRecord>
|
8
|
+
{
|
9
|
+
public AvroFormatTransactionalPageOutput(KafkaProducer<Object, Object> producer, PageReader pageReader, KafkaOutputColumnVisitor<GenericRecord> columnVisitor, String topic, int taskIndex)
|
10
|
+
{
|
11
|
+
super(producer, pageReader, columnVisitor, topic, taskIndex);
|
12
|
+
}
|
13
|
+
};
|
@@ -10,23 +10,41 @@ import org.msgpack.value.Value;
|
|
10
10
|
import java.io.IOException;
|
11
11
|
import java.time.format.DateTimeFormatter;
|
12
12
|
|
13
|
-
public class JsonFormatColumnVisitor extends KafkaOutputColumnVisitor
|
13
|
+
public class JsonFormatColumnVisitor extends KafkaOutputColumnVisitor<ObjectNode>
|
14
14
|
{
|
15
15
|
private ObjectMapper objectMapper;
|
16
|
-
|
16
|
+
private ObjectNode jsonNode;
|
17
17
|
|
18
18
|
private static DateTimeFormatter timestampFormatter = DateTimeFormatter.ISO_INSTANT;
|
19
19
|
|
20
|
-
|
20
|
+
JsonFormatColumnVisitor(KafkaOutputPlugin.PluginTask task, PageReader pageReader, ObjectMapper objectMapper)
|
21
21
|
{
|
22
22
|
super(task, pageReader);
|
23
23
|
this.objectMapper = objectMapper;
|
24
|
+
}
|
25
|
+
|
26
|
+
@Override
|
27
|
+
public ObjectNode getRecord()
|
28
|
+
{
|
29
|
+
if (isDeletion()) {
|
30
|
+
return null;
|
31
|
+
}
|
32
|
+
|
33
|
+
return jsonNode;
|
34
|
+
}
|
35
|
+
|
36
|
+
@Override
|
37
|
+
void reset()
|
38
|
+
{
|
39
|
+
super.reset();
|
24
40
|
this.jsonNode = objectMapper.createObjectNode();
|
25
41
|
}
|
26
42
|
|
27
43
|
@Override
|
28
44
|
public void booleanColumn(Column column)
|
29
45
|
{
|
46
|
+
super.booleanColumn(column);
|
47
|
+
|
30
48
|
if (isIgnoreColumn(column)) {
|
31
49
|
return;
|
32
50
|
}
|
@@ -42,6 +60,8 @@ public class JsonFormatColumnVisitor extends KafkaOutputColumnVisitor
|
|
42
60
|
@Override
|
43
61
|
public void longColumn(Column column)
|
44
62
|
{
|
63
|
+
super.longColumn(column);
|
64
|
+
|
45
65
|
if (isIgnoreColumn(column)) {
|
46
66
|
return;
|
47
67
|
}
|
@@ -58,6 +78,8 @@ public class JsonFormatColumnVisitor extends KafkaOutputColumnVisitor
|
|
58
78
|
@Override
|
59
79
|
public void doubleColumn(Column column)
|
60
80
|
{
|
81
|
+
super.doubleColumn(column);
|
82
|
+
|
61
83
|
if (isIgnoreColumn(column)) {
|
62
84
|
return;
|
63
85
|
}
|
@@ -68,12 +90,13 @@ public class JsonFormatColumnVisitor extends KafkaOutputColumnVisitor
|
|
68
90
|
}
|
69
91
|
|
70
92
|
jsonNode.put(column.getName(), pageReader.getDouble(column));
|
71
|
-
super.doubleColumn(column);
|
72
93
|
}
|
73
94
|
|
74
95
|
@Override
|
75
96
|
public void stringColumn(Column column)
|
76
97
|
{
|
98
|
+
super.stringColumn(column);
|
99
|
+
|
77
100
|
if (isIgnoreColumn(column)) {
|
78
101
|
return;
|
79
102
|
}
|
@@ -84,7 +107,6 @@ public class JsonFormatColumnVisitor extends KafkaOutputColumnVisitor
|
|
84
107
|
}
|
85
108
|
|
86
109
|
jsonNode.put(column.getName(), pageReader.getString(column));
|
87
|
-
super.stringColumn(column);
|
88
110
|
}
|
89
111
|
|
90
112
|
@Override
|
@@ -0,0 +1,13 @@
|
|
1
|
+
package org.embulk.output.kafka;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.databind.node.ObjectNode;
|
4
|
+
import org.apache.kafka.clients.producer.KafkaProducer;
|
5
|
+
import org.embulk.spi.PageReader;
|
6
|
+
|
7
|
+
public class JsonFormatTransactionalPageOutput extends KafkaTransactionalPageOutput<ObjectNode, ObjectNode>
|
8
|
+
{
|
9
|
+
public JsonFormatTransactionalPageOutput(KafkaProducer<Object, ObjectNode> producer, PageReader pageReader, KafkaOutputColumnVisitor<ObjectNode> columnVisitor, String topic, int taskIndex)
|
10
|
+
{
|
11
|
+
super(producer, pageReader, columnVisitor, topic, taskIndex);
|
12
|
+
}
|
13
|
+
};
|
@@ -4,44 +4,98 @@ import org.embulk.spi.Column;
|
|
4
4
|
import org.embulk.spi.ColumnVisitor;
|
5
5
|
import org.embulk.spi.PageReader;
|
6
6
|
|
7
|
-
public abstract class KafkaOutputColumnVisitor implements ColumnVisitor
|
7
|
+
public abstract class KafkaOutputColumnVisitor<T> implements ColumnVisitor
|
8
8
|
{
|
9
|
-
KafkaOutputPlugin.PluginTask task;
|
9
|
+
private KafkaOutputPlugin.PluginTask task;
|
10
10
|
PageReader pageReader;
|
11
|
+
private String partitionColumnName;
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
private Object recordKey = null;
|
14
|
+
private String topicName = null;
|
15
|
+
private Integer partition = null;
|
16
|
+
private boolean deletion = false;
|
14
17
|
|
15
|
-
|
18
|
+
KafkaOutputColumnVisitor(KafkaOutputPlugin.PluginTask task, PageReader pageReader)
|
16
19
|
{
|
17
20
|
this.task = task;
|
18
21
|
this.pageReader = pageReader;
|
22
|
+
this.partitionColumnName = task.getPartitionColumnName().orElse(null);
|
19
23
|
}
|
20
24
|
|
21
|
-
|
25
|
+
public abstract T getRecord();
|
26
|
+
|
27
|
+
Object getRecordKey()
|
28
|
+
{
|
29
|
+
return recordKey;
|
30
|
+
}
|
31
|
+
|
32
|
+
private void setRecordKey(Column column, Object value)
|
22
33
|
{
|
23
34
|
if (task.getKeyColumnName().isPresent() && task.getKeyColumnName().get().equals(column.getName())) {
|
24
35
|
recordKey = value;
|
25
36
|
}
|
26
37
|
}
|
27
38
|
|
28
|
-
|
39
|
+
String getTopicName()
|
40
|
+
{
|
41
|
+
return topicName;
|
42
|
+
}
|
43
|
+
|
44
|
+
private void setTopicName(Column column, String value)
|
29
45
|
{
|
30
46
|
if (task.getTopicColumn().isPresent() && task.getTopicColumn().get().equals(column.getName())) {
|
31
47
|
topicName = value;
|
32
48
|
}
|
33
49
|
}
|
34
50
|
|
51
|
+
Integer getPartition()
|
52
|
+
{
|
53
|
+
return partition;
|
54
|
+
}
|
55
|
+
|
56
|
+
boolean isDeletion()
|
57
|
+
{
|
58
|
+
return deletion;
|
59
|
+
}
|
60
|
+
|
61
|
+
void reset()
|
62
|
+
{
|
63
|
+
this.recordKey = null;
|
64
|
+
this.topicName = null;
|
65
|
+
this.partition = null;
|
66
|
+
this.deletion = false;
|
67
|
+
}
|
68
|
+
|
35
69
|
boolean isIgnoreColumn(Column column)
|
36
70
|
{
|
37
71
|
return task.getIgnoreColumns().stream().anyMatch(name -> name.equals(column.getName()));
|
38
72
|
}
|
39
73
|
|
74
|
+
boolean isColumnForDeletion(Column column)
|
75
|
+
{
|
76
|
+
return task.getColumnForDeletion().map(name -> name.equals(column.getName())).orElse(false);
|
77
|
+
}
|
78
|
+
|
79
|
+
@Override
|
80
|
+
public void booleanColumn(Column column)
|
81
|
+
{
|
82
|
+
if (!pageReader.isNull(column)) {
|
83
|
+
if (isColumnForDeletion(column)) {
|
84
|
+
deletion = pageReader.getBoolean(column);
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
40
89
|
@Override
|
41
90
|
public void longColumn(Column column)
|
42
91
|
{
|
43
92
|
if (!pageReader.isNull(column)) {
|
44
|
-
|
93
|
+
long value = pageReader.getLong(column);
|
94
|
+
setRecordKey(column, value);
|
95
|
+
|
96
|
+
if (partitionColumnName != null && partitionColumnName.equals(column.getName())) {
|
97
|
+
partition = Long.valueOf(value).intValue();
|
98
|
+
}
|
45
99
|
}
|
46
100
|
}
|
47
101
|
|