forked from googleapis/google-cloud-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLoadJobInfo.java
More file actions
186 lines (156 loc) · 5.91 KB
/
LoadJobInfo.java
File metadata and controls
186 lines (156 loc) · 5.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/*
* Copyright 2015 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.gcloud.bigquery;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.api.services.bigquery.model.Job;
import com.google.api.services.bigquery.model.JobConfiguration;
import com.google.api.services.bigquery.model.JobConfigurationLoad;
import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.collect.ImmutableList;
import com.google.gcloud.bigquery.JobStatistics.LoadStatistics;
import java.util.List;
import java.util.Objects;
/**
* Google BigQuery Load Job. A Load Job loads data from one of several formats into a table. Data is
* provided as URIs that point to objects in Google Cloud Storage.
*/
public class LoadJobInfo extends JobInfo<LoadStatistics> {
private static final long serialVersionUID = 6349304826867750535L;
private final List<String> sourceUris;
private final LoadConfiguration configuration;
public static final class Builder extends JobInfo.Builder<LoadJobInfo, LoadStatistics, Builder> {
private List<String> sourceUris;
private LoadConfiguration configuration;
private Builder() {}
private Builder(LoadJobInfo jobInfo) {
super(jobInfo);
this.sourceUris = jobInfo.sourceUris;
this.configuration = jobInfo.configuration;
}
private Builder(Job jobPb) {
super(jobPb);
JobConfigurationLoad loadConfigurationPb = jobPb.getConfiguration().getLoad();
this.configuration = LoadConfiguration.fromPb(loadConfigurationPb);
this.sourceUris = loadConfigurationPb.getSourceUris();
}
/**
* Sets the fully-qualified URIs that point to source data in Google Cloud Storage (e.g.
* gs://bucket/path). Each URI can contain one '*' wildcard character and it must come after the
* 'bucket' name.
*/
public Builder sourceUris(List<String> sourceUris) {
this.sourceUris = sourceUris != null ? ImmutableList.copyOf(sourceUris) : null;
return this;
}
/**
* Sets the configuration for the BigQuery Load Job.
*/
public Builder configuration(LoadConfiguration configuration) {
this.configuration = configuration;
return this;
}
@Override
public LoadJobInfo build() {
return new LoadJobInfo(this);
}
}
private LoadJobInfo(Builder builder) {
super(builder);
this.sourceUris = builder.sourceUris;
this.configuration = builder.configuration;
}
/**
* Returns the fully-qualified URIs that point to source data in Google Cloud Storage (e.g.
* gs://bucket/path). Each URI can contain one '*' wildcard character and it must come after the
* 'bucket' name.
*/
public List<String> sourceUris() {
return sourceUris;
}
/**
* Returns the configuration for the BigQuery Load Job.
*/
public LoadConfiguration configuration() {
return configuration;
}
@Override
public Builder toBuilder() {
return new Builder(this);
}
@Override
ToStringHelper toStringHelper() {
return super.toStringHelper().add("sourceUris", sourceUris).add("configuration", configuration);
}
@Override
public boolean equals(Object obj) {
return obj instanceof LoadJobInfo && baseEquals((LoadJobInfo) obj);
}
@Override
public int hashCode() {
return Objects.hash(baseHashCode(), sourceUris, configuration);
}
@Override
Job toPb() {
JobConfigurationLoad loadConfigurationPb = configuration.toPb();
loadConfigurationPb.setSourceUris(sourceUris);
return super.toPb().setConfiguration(new JobConfiguration().setLoad(loadConfigurationPb));
}
/**
* Creates a builder for a BigQuery Load Job given the load configuration and source URI.
*/
public static Builder builder(LoadConfiguration configuration, String sourceUri) {
return builder(configuration, ImmutableList.of(checkNotNull(sourceUri)));
}
/**
* Creates a builder for a BigQuery Load Job given the load configuration and source URIs.
*/
public static Builder builder(LoadConfiguration configuration, List<String> sourceUris) {
return new Builder().configuration(configuration).sourceUris(sourceUris);
}
/**
* Returns a BigQuery Load Job for the given load configuration and source URI. Job's id is chosen
* by the service.
*/
public static LoadJobInfo of(LoadConfiguration configuration, String sourceUri) {
return builder(configuration, sourceUri).build();
}
/**
* Returns a BigQuery Load Job for the given load configuration and source URIs. Job's id is
* chosen by the service.
*/
public static LoadJobInfo of(LoadConfiguration configuration, List<String> sourceUris) {
return builder(configuration, sourceUris).build();
}
/**
* Returns a BigQuery Load Job for the given load configuration and source URI. Job's id is set to
* the provided value.
*/
public static LoadJobInfo of(JobId jobId, LoadConfiguration configuration, String sourceUri) {
return builder(configuration, sourceUri).jobId(jobId).build();
}
/**
* Returns a BigQuery Load Job for the given load configuration and source URIs. Job's id is set
* to the provided value.
*/
public static LoadJobInfo of(JobId jobId, LoadConfiguration configuration,
List<String> sourceUris) {
return builder(configuration, sourceUris).jobId(jobId).build();
}
@SuppressWarnings("unchecked")
static LoadJobInfo fromPb(Job jobPb) {
return new Builder(jobPb).build();
}
}