com.google.cloud.bigquery.Dataset 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.Preconditions.checkNotNull;
import com.google.api.gax.paging.Page;
import com.google.cloud.bigquery.BigQuery.DatasetDeleteOption;
import com.google.cloud.bigquery.BigQuery.DatasetOption;
import com.google.cloud.bigquery.BigQuery.TableListOption;
import com.google.cloud.bigquery.BigQuery.TableOption;
import com.google.common.base.Strings;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* A Google BigQuery Dataset.
*
* Objects of this class are immutable. Operations that modify the dataset like {@link #update}
* return a new object. To get a {@code Dataset} object with the most recent information use {@link
* #reload}. {@code Dataset} adds a layer of service-related functionality over {@link DatasetInfo}.
*/
public class Dataset extends DatasetInfo {
private static final long serialVersionUID = -4272921483363065593L;
private final BigQueryOptions options;
private transient BigQuery bigquery;
/** A builder for {@code Dataset} objects. */
public static final class Builder extends DatasetInfo.Builder {
private final BigQuery bigquery;
private final DatasetInfo.BuilderImpl infoBuilder;
Builder(BigQuery bigquery, DatasetId datasetId) {
this.bigquery = bigquery;
this.infoBuilder = new DatasetInfo.BuilderImpl();
this.infoBuilder.setDatasetId(datasetId);
}
Builder(Dataset dataset) {
this.bigquery = dataset.bigquery;
this.infoBuilder = new DatasetInfo.BuilderImpl(dataset);
}
@Override
public Builder setDatasetId(DatasetId datasetId) {
infoBuilder.setDatasetId(datasetId);
return this;
}
@Override
public Builder setAcl(List acl) {
infoBuilder.setAcl(acl);
return this;
}
@Override
Builder setCreationTime(Long creationTime) {
infoBuilder.setCreationTime(creationTime);
return this;
}
@Override
public Builder setDefaultTableLifetime(Long defaultTableLifetime) {
infoBuilder.setDefaultTableLifetime(defaultTableLifetime);
return this;
}
@Override
public Builder setDescription(String description) {
infoBuilder.setDescription(description);
return this;
}
@Override
Builder setEtag(String etag) {
infoBuilder.setEtag(etag);
return this;
}
@Override
public Builder setFriendlyName(String friendlyName) {
infoBuilder.setFriendlyName(friendlyName);
return this;
}
@Override
Builder setGeneratedId(String generatedId) {
infoBuilder.setGeneratedId(generatedId);
return this;
}
@Override
Builder setLastModified(Long lastModified) {
infoBuilder.setLastModified(lastModified);
return this;
}
@Override
public Builder setLocation(String location) {
infoBuilder.setLocation(location);
return this;
}
@Override
Builder setSelfLink(String selfLink) {
infoBuilder.setSelfLink(selfLink);
return this;
}
@Override
public Builder setLabels(Map labels) {
infoBuilder.setLabels(labels);
return this;
}
@Override
public Builder setDefaultEncryptionConfiguration(
EncryptionConfiguration defaultEncryptionConfiguration) {
infoBuilder.setDefaultEncryptionConfiguration(defaultEncryptionConfiguration);
return this;
}
@Override
public Builder setDefaultPartitionExpirationMs(Long defaultPartitionExpirationMs) {
infoBuilder.setDefaultPartitionExpirationMs(defaultPartitionExpirationMs);
return this;
}
@Override
public Builder setDefaultCollation(String defaultCollation) {
infoBuilder.setDefaultCollation(defaultCollation);
return this;
}
@Override
public Builder setExternalDatasetReference(ExternalDatasetReference externalDatasetReference) {
infoBuilder.setExternalDatasetReference(externalDatasetReference);
return this;
}
@Override
public Builder setStorageBillingModel(String storageBillingModel) {
infoBuilder.setStorageBillingModel(storageBillingModel);
return this;
}
@Override
public Dataset build() {
return new Dataset(bigquery, infoBuilder);
}
}
Dataset(BigQuery bigquery, DatasetInfo.BuilderImpl infoBuilder) {
super(infoBuilder);
this.bigquery = checkNotNull(bigquery);
this.options = bigquery.getOptions();
}
/**
* Checks if this dataset exists.
*
* Example of checking whether a dataset exists.
*
*
{@code
* boolean exists = dataset.exists();
* if (exists) {
* // the dataset exists
* } else {
* // the dataset was not found
* }
* }
*
* @return {@code true} if this dataset exists, {@code false} otherwise
* @throws BigQueryException upon failure
*/
public boolean exists() {
return bigquery.getDataset(getDatasetId(), DatasetOption.fields()) != null;
}
/**
* Fetches current dataset's latest information. Returns {@code null} if the dataset does not
* exist.
*
* Example of reloading a dataset.
*
*
{@code
* Dataset latestDataset = dataset.reload();
* if (latestDataset == null) {
* // The dataset was not found
* }
* }
*
* @param options dataset options
* @return a {@code Dataset} object with latest information or {@code null} if not found
* @throws BigQueryException upon failure
*/
public Dataset reload(DatasetOption... options) {
return bigquery.getDataset(getDatasetId().getDataset(), options);
}
/**
* Updates the dataset's information with this dataset's information. Dataset's user-defined id
* cannot be changed. A new {@code Dataset} object is returned.
*
* Example of updating a dataset.
*
*
{@code
* String friendlyName = "my_friendly_name";
* Builder builder = dataset.toBuilder();
* builder.setFriendlyName(friendlyName);
* Dataset updatedDataset = builder.build().update();
* }
*
* @param options dataset options
* @return a {@code Dataset} object with updated information
* @throws BigQueryException upon failure
*/
public Dataset update(DatasetOption... options) {
return bigquery.update(this, options);
}
/**
* Deletes this dataset.
*
* Example of deleting a dataset.
*
*
{@code
* boolean deleted = dataset.delete();
* if (deleted) {
* // The dataset was deleted
* } else {
* // The dataset was not found
* }
* }
*
* @return {@code true} if dataset was deleted, {@code false} if it was not found
* @throws BigQueryException upon failure
*/
public boolean delete(DatasetDeleteOption... options) {
return bigquery.delete(getDatasetId(), options);
}
/**
* Returns the paginated list of tables in this dataset.
*
* Example of listing tables in the dataset.
*
*
{@code
* Page
tables = dataset.list();
* for (Table table : tables.iterateAll()) {
* // do something with the table
* }
* }
*
* @param options options for listing tables
* @throws BigQueryException upon failure
*/
public Page list(TableListOption... options) {
return bigquery.listTables(getDatasetId(), options);
}
/**
* Returns the requested table in this dataset or {@code null} if not found.
*
* Example of getting a table in the dataset.
*
*
{@code
* String tableName = “my_table”;
* Table table = dataset.get(tableName);
* }
*
* @param tableId user-defined id of the requested table
* @param options table options
* @throws BigQueryException upon failure
*/
public Table get(String tableId, TableOption... options) {
// Adding the projectId used of getting the DataSet as a parameter for the issue:
// https://github.com/googleapis/java-bigquery/issues/1369
TableId tabId =
Strings.isNullOrEmpty(getDatasetId().getProject())
? TableId.of(getDatasetId().getDataset(), tableId)
: TableId.of(getDatasetId().getProject(), getDatasetId().getDataset(), tableId);
return bigquery.getTable(tabId, options);
}
/**
* Creates a new table in this dataset.
*
* Example of creating a table in the dataset with schema and time partitioning.
*
*
{@code
* String tableName = “my_table”;
* String fieldName = “my_field”;
* Schema schema = Schema.of(Field.of(fieldName, LegacySQLTypeName.STRING));
* StandardTableDefinition definition = StandardTableDefinition.newBuilder()
* .setSchema(schema)
* .setTimePartitioning(TimePartitioning.of(TimePartitioning.Type.DAY))
* .build();
* Table table = dataset.create(tableName, definition);
* }
*
* @param tableId the table's user-defined id
* @param definition the table's definition
* @param options options for table creation
* @return a {@code Table} object for the created table
* @throws BigQueryException upon failure
*/
public Table create(String tableId, TableDefinition definition, TableOption... options) {
TableInfo tableInfo =
TableInfo.of(TableId.of(getDatasetId().getDataset(), tableId), definition);
return bigquery.create(tableInfo, options);
}
/** Returns the dataset's {@code BigQuery} object used to issue requests. */
public BigQuery getBigQuery() {
return bigquery;
}
@Override
public Builder toBuilder() {
return new Builder(this);
}
@Override
public final boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null || !obj.getClass().equals(Dataset.class)) {
return false;
}
Dataset other = (Dataset) obj;
return Objects.equals(toPb(), other.toPb()) && Objects.equals(options, other.options);
}
@Override
public final int hashCode() {
return Objects.hash(super.hashCode(), options);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
this.bigquery = options.getService();
}
static Dataset fromPb(
BigQuery bigquery, com.google.api.services.bigquery.model.Dataset datasetPb) {
return new Dataset(bigquery, new DatasetInfo.BuilderImpl(datasetPb));
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy