Skip to content

Commit 5727477

Browse files
committed
Add per-row resolution of schema for select in BigQueryLoad
1 parent 67ab935 commit 5727477

8 files changed

Lines changed: 30 additions & 9 deletions

File tree

API/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.ohnlp.backbone</groupId>
99
<artifactId>backbone-parent</artifactId>
10-
<version>1.1.2</version>
10+
<version>1.1.3</version>
1111
</parent>
1212

1313
<artifactId>api</artifactId>

Core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.ohnlp.backbone</groupId>
99
<artifactId>backbone-parent</artifactId>
10-
<version>1.1.2</version>
10+
<version>1.1.3</version>
1111
</parent>
1212

1313
<artifactId>core</artifactId>

Example-Backbone-Configs/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.ohnlp.backbone</groupId>
99
<artifactId>backbone-parent</artifactId>
10-
<version>1.1.2</version>
10+
<version>1.1.3</version>
1111
</parent>
1212

1313
<artifactId>example-backbone-configs</artifactId>

IO/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.ohnlp.backbone</groupId>
99
<artifactId>backbone-parent</artifactId>
10-
<version>1.1.2</version>
10+
<version>1.1.3</version>
1111
</parent>
1212

1313
<groupId>org.ohnlp.backbone.io</groupId>

IO/src/main/java/org/ohnlp/backbone/io/bigquery/BigQueryLoad.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
import com.google.api.services.bigquery.model.TableRow;
55
import org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO;
66
import org.apache.beam.sdk.io.gcp.bigquery.BigQueryUtils;
7+
import org.apache.beam.sdk.schemas.Schema;
78
import org.apache.beam.sdk.schemas.transforms.Select;
89
import org.apache.beam.sdk.transforms.DoFn;
910
import org.apache.beam.sdk.transforms.ParDo;
1011
import org.apache.beam.sdk.values.PCollection;
1112
import org.apache.beam.sdk.values.PDone;
1213
import org.apache.beam.sdk.values.POutput;
1314
import org.apache.beam.sdk.values.Row;
15+
import org.joda.time.Duration;
1416
import org.ohnlp.backbone.api.Load;
1517
import org.ohnlp.backbone.api.exceptions.ComponentInitializationException;
1618

@@ -36,13 +38,32 @@ public void initFromConfig(JsonNode config) throws ComponentInitializationExcept
3638
@Override
3739
public POutput expand(PCollection<Row> input) {
3840
if (this.selectedFields.size() > 0) {
39-
input = input.apply("Subset Columns", Select.fieldNames(this.selectedFields.toArray(new String[0])));
41+
input = input.apply("Subset Columns", ParDo.of(new DoFn<Row, Row>() {
42+
@ProcessElement
43+
public void process(ProcessContext c) {
44+
Row input = c.element();
45+
// We have to dynamically resolve schema row by row because
46+
// we don't store schema in the collection itself as it is user-configurable/dynamic
47+
Schema inputSchema = input.getSchema();
48+
List<Schema.Field> outputSchemaFields = new ArrayList<>();
49+
for (String fieldName : selectedFields) {
50+
outputSchemaFields.add(inputSchema.getField(fieldName));
51+
}
52+
Schema outSchema = Schema.of(outputSchemaFields.toArray(new Schema.Field[0]));
53+
// And now just map the values
54+
List<Object> outputValues = new ArrayList<>();
55+
for (String s : selectedFields) {
56+
outputValues.add(input.getValue(s));
57+
}
58+
c.output(Row.withSchema(outSchema).addValues(outputValues).build());
59+
}
60+
}));
4061
}
4162
return input.apply(
4263
"Transform output rows to BigQuery TableRow format", ParDo.of(
4364
new DoFn<Row, TableRow>() {
4465
@ProcessElement
45-
public void processELement(@Element Row row, OutputReceiver<TableRow> out) {
66+
public void processElement(@Element Row row, OutputReceiver<TableRow> out) {
4667
out.output(BigQueryUtils.toTableRow(row));
4768
}
4869
}

Plugin-Manager/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.ohnlp.backbone</groupId>
99
<artifactId>backbone-parent</artifactId>
10-
<version>1.1.2</version>
10+
<version>1.1.3</version>
1111
</parent>
1212

1313
<artifactId>plugin-manager</artifactId>

Transforms/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.ohnlp.backbone</groupId>
99
<artifactId>backbone-parent</artifactId>
10-
<version>1.1.2</version>
10+
<version>1.1.3</version>
1111
</parent>
1212

1313
<groupId>org.ohnlp.backbone.transforms</groupId>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>org.ohnlp.backbone</groupId>
88
<artifactId>backbone-parent</artifactId>
9-
<version>1.1.2</version>
9+
<version>1.1.3</version>
1010

1111

1212
<properties>

0 commit comments

Comments
 (0)