[Cloud Spanner to BigQuery Template] Fix a NPE when one of the source fields contains a NULL value. #1720
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Without this fix, the template expects all the source record fields to have non-NULL values. If there is one, an exception is thrown:
org.apache.beam.sdk.util.UserCodeException:java.lang.NullPointerException: Column field0 contains NULL value.
The reason is that SpannerUtils class tries to call struct.getString/getLong/etc. unconditionally, and these methods throw an exception if the value is null. The fix is to skip such fields and not include them in the JSON object (TableRow) being written to BigQuery. This will also allow a target field in BigQuery to not exist at all if the corresponding source field in Spanner is always null.