
com.google.cloud.bigquery.Schema Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gcloud-java-bigquery Show documentation
Show all versions of gcloud-java-bigquery Show documentation
Java idiomatic client for Google Cloud BigQuery.
/*
* 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.cloud.bigquery;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.api.services.bigquery.model.TableFieldSchema;
import com.google.common.base.Function;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.io.Serializable;
import java.util.List;
import java.util.Objects;
/**
* This class represents the schema for a Google BigQuery Table or data source.
*/
public final class Schema implements Serializable {
static final Function
FROM_PB_FUNCTION = new Function() {
@Override
public Schema apply(com.google.api.services.bigquery.model.TableSchema pb) {
return Schema.fromPb(pb);
}
};
static final Function
TO_PB_FUNCTION = new Function() {
@Override
public com.google.api.services.bigquery.model.TableSchema apply(Schema schema) {
return schema.toPb();
}
};
private static final long serialVersionUID = 2007400596384553696L;
private final List fields;
public static final class Builder {
private List fields;
private Builder() {}
/**
* Adds a field's schema to the table's schema.
*/
public Builder addField(Field field) {
if (fields == null) {
fields = Lists.newArrayList();
}
fields.add(checkNotNull(field));
return this;
}
/**
* Sets table's schema fields.
*/
public Builder fields(Iterable fields) {
this.fields = Lists.newArrayList(checkNotNull(fields));
return this;
}
/**
* Sets table's schema fields.
*/
public Builder fields(Field... fields) {
this.fields = Lists.newArrayList(fields);
return this;
}
/**
* Creates an {@code Schema} object.
*/
public Schema build() {
return new Schema(this);
}
}
private Schema(Builder builder) {
this.fields = builder.fields != null ? ImmutableList.copyOf(builder.fields)
: ImmutableList.of();
}
/**
* Returns the fields in the current table schema.
*/
public List fields() {
return fields;
}
/**
* Returns a builder for the {@code Schema} object.
*/
public Builder toBuilder() {
return builder().fields(fields);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("fields", fields)
.toString();
}
@Override
public int hashCode() {
return Objects.hash(fields);
}
@Override
public boolean equals(Object obj) {
return obj == this
|| obj instanceof Schema
&& Objects.equals(toPb(), ((Schema) obj).toPb());
}
com.google.api.services.bigquery.model.TableSchema toPb() {
com.google.api.services.bigquery.model.TableSchema tableSchemaPb =
new com.google.api.services.bigquery.model.TableSchema();
if (fields != null) {
List fieldsPb = Lists.transform(fields, Field.TO_PB_FUNCTION);
tableSchemaPb.setFields(fieldsPb);
}
return tableSchemaPb;
}
public static Builder builder() {
return new Builder();
}
public static Schema of(Iterable fields) {
return builder().fields(fields).build();
}
public static Schema of(Field... fields) {
return builder().fields(fields).build();
}
static Schema fromPb(com.google.api.services.bigquery.model.TableSchema tableSchemaPb) {
return Schema.of(Lists.transform(tableSchemaPb.getFields(), Field.FROM_PB_FUNCTION));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy