com.google.cloud.bigquery.TableInfo Maven / Gradle / Ivy
Show all versions of google-cloud-bigquery Show documentation
/*
* Copyright 2015 Google LLC
*
* 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.MoreObjects.firstNonNull;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.api.client.util.Data;
import com.google.api.core.BetaApi;
import com.google.api.services.bigquery.model.Table;
import com.google.common.base.Function;
import com.google.common.base.MoreObjects;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.Map;
import java.util.Objects;
/**
* Google BigQuery table information. Use {@link StandardTableDefinition} to create simple BigQuery
* table. Use {@link ViewDefinition} to create a BigQuery view. Use {@link ExternalTableDefinition}
* to create a BigQuery a table backed by external data.
*
* @see Managing Tables
*/
public class TableInfo implements Serializable {
static final Function FROM_PB_FUNCTION =
new Function() {
@Override
public TableInfo apply(Table pb) {
return TableInfo.fromPb(pb);
}
};
static final Function TO_PB_FUNCTION =
new Function() {
@Override
public Table apply(TableInfo tableInfo) {
return tableInfo.toPb();
}
};
private static final long serialVersionUID = 609769795097719407L;
private final String etag;
private final String generatedId;
private final String selfLink;
private final TableId tableId;
private final String friendlyName;
private final String description;
private final Long creationTime;
private final Long expirationTime;
private final Long lastModifiedTime;
private final TableDefinition definition;
private final EncryptionConfiguration encryptionConfiguration;
private final Labels labels;
/**
* A builder for {@code TableInfo} objects.
*/
public abstract static class Builder {
abstract Builder setCreationTime(Long creationTime);
/**
* Sets a user-friendly description for the table.
*/
public abstract Builder setDescription(String description);
abstract Builder setEtag(String etag);
/**
* Sets the time when this table expires, in milliseconds since the epoch. If not present, the
* table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
*/
public abstract Builder setExpirationTime(Long expirationTime);
/**
* Sets a user-friendly name for the table.
*/
public abstract Builder setFriendlyName(String friendlyName);
abstract Builder setGeneratedId(String generatedId);
abstract Builder setLastModifiedTime(Long lastModifiedTime);
abstract Builder setSelfLink(String selfLink);
/**
* Sets the table identity.
*/
public abstract Builder setTableId(TableId tableId);
/**
* Sets the table definition. Use {@link StandardTableDefinition} to create simple BigQuery
* table. Use {@link ViewDefinition} to create a BigQuery view. Use
* {@link ExternalTableDefinition} to create a BigQuery a table backed by external data.
*/
public abstract Builder setDefinition(TableDefinition definition);
/**
* Sets the labels applied to this table.
*
* Unstable, because labels are experimental.
*
*
When used with {@link BigQuery#update(TableInfo, TableOption...)}, setting {@code labels}
* to {@code null} removes all labels; otherwise all keys that are mapped to {@code null} values
* are removed and other keys are updated to their respective values.
*/
@BetaApi
public abstract Builder setLabels(Map labels);
/**
* Creates a {@code TableInfo} object.
*/
public abstract TableInfo build();
public abstract Builder setEncryptionConfiguration(EncryptionConfiguration configuration);
}
static class BuilderImpl extends Builder {
private String etag;
private String generatedId;
private String selfLink;
private TableId tableId;
private String friendlyName;
private String description;
private Long creationTime;
private Long expirationTime;
private Long lastModifiedTime;
private TableDefinition definition;
private EncryptionConfiguration encryptionConfiguration;
private Labels labels = Labels.ZERO;
BuilderImpl() {}
BuilderImpl(TableInfo tableInfo) {
this.etag = tableInfo.etag;
this.generatedId = tableInfo.generatedId;
this.selfLink = tableInfo.selfLink;
this.tableId = tableInfo.tableId;
this.friendlyName = tableInfo.friendlyName;
this.description = tableInfo.description;
this.creationTime = tableInfo.creationTime;
this.expirationTime = tableInfo.expirationTime;
this.lastModifiedTime = tableInfo.lastModifiedTime;
this.definition = tableInfo.definition;
this.encryptionConfiguration = tableInfo.encryptionConfiguration;
this.labels = tableInfo.labels;
}
BuilderImpl(Table tablePb) {
this.tableId = TableId.fromPb(tablePb.getTableReference());
if (tablePb.getLastModifiedTime() != null) {
this.setLastModifiedTime(tablePb.getLastModifiedTime().longValue());
}
this.description = tablePb.getDescription();
this.expirationTime = tablePb.getExpirationTime();
this.friendlyName = tablePb.getFriendlyName();
this.creationTime = tablePb.getCreationTime();
this.etag = tablePb.getEtag();
this.generatedId = tablePb.getId();
this.selfLink = tablePb.getSelfLink();
this.definition = TableDefinition.fromPb(tablePb);
if (tablePb.getEncryptionConfiguration() != null) {
this.encryptionConfiguration =
new EncryptionConfiguration.Builder(tablePb.getEncryptionConfiguration()).build();
}
this.labels = Labels.fromPb(tablePb.getLabels());
}
@Override
Builder setCreationTime(Long creationTime) {
this.creationTime = creationTime;
return this;
}
@Override
public Builder setDescription(String description) {
this.description = firstNonNull(description, Data.nullOf(String.class));
return this;
}
@Override
Builder setEtag(String etag) {
this.etag = etag;
return this;
}
@Override
public Builder setExpirationTime(Long expirationTime) {
this.expirationTime = firstNonNull(expirationTime, Data.nullOf(Long.class));
return this;
}
@Override
public Builder setFriendlyName(String friendlyName) {
this.friendlyName = firstNonNull(friendlyName, Data.nullOf(String.class));
return this;
}
@Override
Builder setGeneratedId(String generatedId) {
this.generatedId = generatedId;
return this;
}
@Override
Builder setLastModifiedTime(Long lastModifiedTime) {
this.lastModifiedTime = lastModifiedTime;
return this;
}
@Override
Builder setSelfLink(String selfLink) {
this.selfLink = selfLink;
return this;
}
@Override
public Builder setTableId(TableId tableId) {
this.tableId = checkNotNull(tableId);
return this;
}
@Override
public Builder setDefinition(TableDefinition definition) {
this.definition = checkNotNull(definition);
return this;
}
@Override
public Builder setEncryptionConfiguration(EncryptionConfiguration configuration) {
this.encryptionConfiguration = configuration;
return this;
}
@Override
public Builder setLabels(Map labels) {
this.labels = Labels.fromUser(labels);
return this;
}
@Override
public TableInfo build() {
return new TableInfo(this);
}
}
TableInfo(BuilderImpl builder) {
this.tableId = checkNotNull(builder.tableId);
this.etag = builder.etag;
this.generatedId = builder.generatedId;
this.selfLink = builder.selfLink;
this.friendlyName = builder.friendlyName;
this.description = builder.description;
this.creationTime = builder.creationTime;
this.expirationTime = builder.expirationTime;
this.lastModifiedTime = builder.lastModifiedTime;
this.definition = builder.definition;
this.encryptionConfiguration = builder.encryptionConfiguration;
labels = builder.labels;
}
/**
* Returns the hash of the table resource.
*/
public String getEtag() {
return etag;
}
/**
* Returns the service-generated id for the table.
*/
public String getGeneratedId() {
return generatedId;
}
/**
* Returns an URL that can be used to access the resource again. The returned URL can be used for
* get or update requests.
*/
public String getSelfLink() {
return selfLink;
}
/**
* Returns the table identity.
*/
public TableId getTableId() {
return tableId;
}
/**
* Returns a user-friendly name for the table.
*/
public String getFriendlyName() {
return Data.isNull(friendlyName) ? null : friendlyName;
}
/**
* Returns a user-friendly description for the table.
*/
public String getDescription() {
return Data.isNull(description) ? null : description;
}
/**
* Returns the time when this table was created, in milliseconds since the epoch.
*/
public Long getCreationTime() {
return creationTime;
}
/**
* Returns the time when this table expires, in milliseconds since the epoch. If not present, the
* table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
*/
public Long getExpirationTime() {
return Data.isNull(expirationTime) ? null : expirationTime;
}
/**
* Returns the time when this table was last modified, in milliseconds since the epoch.
*/
public Long getLastModifiedTime() {
return lastModifiedTime;
}
public EncryptionConfiguration getEncryptionConfiguration() {
return encryptionConfiguration;
}
/**
* Returns the table definition.
*/
@SuppressWarnings("unchecked")
public T getDefinition() {
return (T) definition;
}
/**
* Return a map for labels applied to the table.
*
* Unstable, because labels are experimental.
*/
@BetaApi
public Map getLabels() {
return labels.userMap();
}
/**
* Returns a builder for the table object.
*/
public Builder toBuilder() {
return new BuilderImpl(this);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("tableId", tableId)
.add("etag", etag)
.add("generatedId", generatedId)
.add("selfLink", selfLink)
.add("friendlyName", friendlyName)
.add("description", description)
.add("expirationTime", expirationTime)
.add("creationTime", creationTime)
.add("lastModifiedTime", lastModifiedTime)
.add("definition", definition)
.add("encryptionConfiguration", encryptionConfiguration)
.add("labels", labels)
.toString();
}
@Override
public int hashCode() {
return Objects.hash(tableId);
}
@Override
public boolean equals(Object obj) {
return obj == this
|| obj != null
&& obj.getClass().equals(TableInfo.class)
&& Objects.equals(toPb(), ((TableInfo) obj).toPb());
}
/**
* Returns a builder for a {@code TableInfo} object given table identity and definition. Use
* {@link StandardTableDefinition} to create simple BigQuery table. Use {@link ViewDefinition} to
* create a BigQuery view. Use {@link ExternalTableDefinition} to create a BigQuery a table backed
* by external data.
*/
public static Builder newBuilder(TableId tableId, TableDefinition definition) {
return new BuilderImpl().setTableId(tableId).setDefinition(definition);
}
/**
* Returns a {@code TableInfo} object given table identity and definition. Use
* {@link StandardTableDefinition} to create simple BigQuery table. Use {@link ViewDefinition} to
* create a BigQuery view. Use {@link ExternalTableDefinition} to create a BigQuery a table backed
* by external data.
*/
public static TableInfo of(TableId tableId, TableDefinition definition) {
return newBuilder(tableId, definition).build();
}
TableInfo setProjectId(String projectId) {
return toBuilder().setTableId(getTableId().setProjectId(projectId)).build();
}
Table toPb() {
Table tablePb = definition.toPb();
tablePb.setTableReference(tableId.toPb());
if (lastModifiedTime != null) {
tablePb.setLastModifiedTime(BigInteger.valueOf(lastModifiedTime));
}
tablePb.setCreationTime(creationTime);
tablePb.setDescription(description);
tablePb.setEtag(etag);
tablePb.setExpirationTime(expirationTime);
tablePb.setFriendlyName(friendlyName);
tablePb.setId(generatedId);
tablePb.setSelfLink(selfLink);
if (encryptionConfiguration != null) {
tablePb.setEncryptionConfiguration(encryptionConfiguration.toPb());
}
tablePb.setLabels(labels.toPb());
return tablePb;
}
static TableInfo fromPb(Table tablePb) {
return new BuilderImpl(tablePb).build();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy