Skip to content

Commit 397b2c1

Browse files
committed
Merge pull request #540 from mziccard/bigquery-insert-writer
Add support for BigQuery resumable uploads via a write channel
2 parents 767c41f + b32e4b9 commit 397b2c1

36 files changed

+2181
-1132
lines changed

gcloud-java-bigquery/src/main/java/com/google/gcloud/bigquery/BigQuery.java

+8
Original file line numberDiff line numberDiff line change
@@ -662,4 +662,12 @@ Page<List<FieldValue>> listTableData(TableId tableId, TableDataListOption... opt
662662
* @throws BigQueryException upon failure
663663
*/
664664
QueryResponse getQueryResults(JobId job, QueryResultsOption... options) throws BigQueryException;
665+
666+
/**
667+
* Returns a channel to write data to be inserted into a BigQuery table. Data format and other
668+
* options can be configured using the {@link LoadConfiguration} parameter.
669+
*
670+
* @throws BigQueryException upon failure
671+
*/
672+
TableDataWriteChannel writer(LoadConfiguration loadConfiguration);
665673
}

gcloud-java-bigquery/src/main/java/com/google/gcloud/bigquery/BigQueryImpl.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,10 @@ private static QueryResult.Builder transformQueryResults(JobId jobId, List<Table
619619
.results(transformTableData(rowsPb));
620620
}
621621

622+
public TableDataWriteChannel writer(LoadConfiguration loadConfiguration) {
623+
return new TableDataWriteChannel(options(), setProjectId(loadConfiguration));
624+
}
625+
622626
private Map<BigQueryRpc.Option, ?> optionMap(Option... options) {
623627
Map<BigQueryRpc.Option, Object> optionMap = Maps.newEnumMap(BigQueryRpc.Option.class);
624628
for (Option option : options) {
@@ -698,8 +702,7 @@ public TableId apply(TableId tableId) {
698702
if (job instanceof LoadJobInfo) {
699703
LoadJobInfo loadJob = (LoadJobInfo) job;
700704
LoadJobInfo.Builder loadBuilder = loadJob.toBuilder();
701-
loadBuilder.destinationTable(setProjectId(loadJob.destinationTable()));
702-
return loadBuilder.build();
705+
return loadBuilder.configuration(setProjectId(loadJob.configuration())).build();
703706
}
704707
return job;
705708
}
@@ -711,4 +714,10 @@ private QueryRequest setProjectId(QueryRequest request) {
711714
}
712715
return builder.build();
713716
}
717+
718+
private LoadConfiguration setProjectId(LoadConfiguration configuration) {
719+
LoadConfiguration.Builder builder = configuration.toBuilder();
720+
builder.destinationTable(setProjectId(configuration.destinationTable()));
721+
return builder.build();
722+
}
714723
}

gcloud-java-bigquery/src/main/java/com/google/gcloud/bigquery/CopyJobInfo.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ public Builder destinationTable(TableId destinationTable) {
9595
/**
9696
* Sets whether the job is allowed to create new tables.
9797
*
98-
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.link">
99-
* Jobs: Link Configuration</a>
98+
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.copy.createDisposition">
99+
* Create Disposition</a>
100100
*/
101101
public Builder createDisposition(CreateDisposition createDisposition) {
102102
this.createDisposition = createDisposition;
@@ -106,8 +106,8 @@ public Builder createDisposition(CreateDisposition createDisposition) {
106106
/**
107107
* Sets the action that should occur if the destination table already exists.
108108
*
109-
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.link">
110-
* Jobs: Link Configuration</a>
109+
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.copy.writeDisposition">
110+
* Write Disposition</a>
111111
*/
112112
public Builder writeDisposition(WriteDisposition writeDisposition) {
113113
this.writeDisposition = writeDisposition;
@@ -145,8 +145,8 @@ public TableId destinationTable() {
145145
/**
146146
* Returns whether the job is allowed to create new tables.
147147
*
148-
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.copy">
149-
* Jobs: Copy Configuration</a>
148+
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.copy.createDisposition">
149+
* Create Disposition</a>
150150
*/
151151
public CreateDisposition createDisposition() {
152152
return this.createDisposition;
@@ -155,8 +155,8 @@ public CreateDisposition createDisposition() {
155155
/**
156156
* Returns the action that should occur if the destination table already exists.
157157
*
158-
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.copy">
159-
* Jobs: Copy Configuration</a>
158+
* @see <a href="https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.copy.writeDisposition">
159+
* Write Disposition</a>
160160
*/
161161
public WriteDisposition writeDisposition() {
162162
return writeDisposition;

0 commit comments

Comments
 (0)