All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.cloud.bigquery.ModelInfo Maven / Gradle / Ivy

/*
 * Copyright 2019 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.core.BetaApi;
import com.google.api.services.bigquery.model.Model;
import com.google.api.services.bigquery.model.TrainingRun;
import com.google.common.base.Function;
import com.google.common.base.MoreObjects;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * Google BigQuery ML model information. Models are not created directly via the API, but by issuing
 * a CREATE MODEL query.
 *
 * @see CREATE
 *     MODEL statement
 */
public class ModelInfo implements Serializable {

  static final Function FROM_PB_FUNCTION =
      new Function() {
        @Override
        public ModelInfo apply(Model pb) {
          return ModelInfo.fromPb(pb);
        }
      };
  static final Function TO_PB_FUNCTION =
      new Function() {
        @Override
        public Model apply(ModelInfo ModelInfo) {
          return ModelInfo.toPb();
        }
      };

  private static final long serialVersionUID = 609769793337719407L;

  private final String etag;
  private final ModelId modelId;
  private final String description;
  private final String modelType;
  private final String friendlyName;
  private final Long creationTime;
  private final Long lastModifiedTime;
  private final Long expirationTime;
  private final Labels labels;
  private final String location;
  private final ImmutableList trainingRunList;
  private final ImmutableList featureColumnList;
  private final ImmutableList labelColumnList;
  private final EncryptionConfiguration encryptionConfiguration;

  /** A builder for {@code ModelInfo} objects. */
  public abstract static class Builder {

    /** Sets the user description for this model. */
    public abstract Builder setDescription(String description);

    /** Sets the user-friendly name for this model. */
    public abstract Builder setFriendlyName(String friendlyName);

    /**
     * Set the time when this model expires, in milliseconds since the epoch. If not present, the
     * model persists indefinitely. Expired models will be deleted.
     */
    public abstract Builder setExpirationTime(Long expirationTime);

    /**
     * Set the labels applied to this model.
     *
     * 

When used with {@link BigQuery#update(ModelInfo, ModelOption...)}, 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. */ public abstract Builder setLabels(Map labels); abstract Builder setLocation(String location); public abstract Builder setModelId(ModelId modelId); abstract Builder setEtag(String etag); abstract Builder setModelType(String modelType); abstract Builder setCreationTime(Long creation); abstract Builder setLastModifiedTime(Long lastModifiedTime); abstract Builder setTrainingRuns(List trainingRunList); abstract Builder setLabelColumns(List labelColumnList); abstract Builder setFeatureColumns(List featureColumnList); public abstract Builder setEncryptionConfiguration(EncryptionConfiguration configuration); /** Creates a {@code ModelInfo} object. */ public abstract ModelInfo build(); } static class BuilderImpl extends Builder { private String etag; private ModelId modelId; private String description; private String modelType; private String friendlyName; private Long creationTime; private Long lastModifiedTime; private Long expirationTime; private Labels labels = Labels.ZERO; private String location; private List trainingRunList = Collections.emptyList(); private List labelColumnList = Collections.emptyList(); private List featureColumnList = Collections.emptyList(); private EncryptionConfiguration encryptionConfiguration; BuilderImpl() {} BuilderImpl(ModelInfo modelInfo) { this.etag = modelInfo.etag; this.modelId = modelInfo.modelId; this.description = modelInfo.description; this.friendlyName = modelInfo.friendlyName; this.modelType = modelInfo.modelType; this.creationTime = modelInfo.creationTime; this.lastModifiedTime = modelInfo.lastModifiedTime; this.expirationTime = modelInfo.expirationTime; this.trainingRunList = modelInfo.trainingRunList; this.labelColumnList = modelInfo.labelColumnList; this.featureColumnList = modelInfo.featureColumnList; this.encryptionConfiguration = modelInfo.encryptionConfiguration; this.location = modelInfo.location; } BuilderImpl(Model modelPb) { this.modelId = ModelId.fromPb(modelPb.getModelReference()); if (modelPb.getLastModifiedTime() != null) { this.setLastModifiedTime(modelPb.getLastModifiedTime().longValue()); } this.etag = modelPb.getEtag(); this.description = modelPb.getDescription(); this.friendlyName = modelPb.getFriendlyName(); this.modelType = modelPb.getModelType(); this.creationTime = modelPb.getCreationTime(); this.lastModifiedTime = modelPb.getLastModifiedTime(); this.expirationTime = modelPb.getExpirationTime(); this.labels = Labels.fromPb(modelPb.getLabels()); this.location = modelPb.getLocation(); if (modelPb.getTrainingRuns() != null) { this.trainingRunList = modelPb.getTrainingRuns(); } if (modelPb.getLabelColumns() != null) { this.labelColumnList = Lists.transform(modelPb.getLabelColumns(), StandardSQLField.FROM_PB_FUNCTION); } if (modelPb.getFeatureColumns() != null) { this.featureColumnList = Lists.transform(modelPb.getFeatureColumns(), StandardSQLField.FROM_PB_FUNCTION); } if (modelPb.getEncryptionConfiguration() != null) { this.encryptionConfiguration = new EncryptionConfiguration.Builder(modelPb.getEncryptionConfiguration()).build(); } } @Override Builder setEtag(String etag) { this.etag = etag; return this; } @Override public Builder setDescription(String description) { this.description = description; return this; } @Override public Builder setFriendlyName(String friendlyName) { this.friendlyName = friendlyName; return this; } @Override Builder setModelType(String modelType) { this.modelType = modelType; return this; } @Override Builder setCreationTime(Long creationTime) { this.creationTime = creationTime; return this; } @Override Builder setLastModifiedTime(Long lastModifiedTime) { this.lastModifiedTime = lastModifiedTime; return this; } @Override public Builder setExpirationTime(Long expirationTime) { this.expirationTime = expirationTime; return this; } @Override public Builder setModelId(ModelId modelId) { this.modelId = modelId; return this; } @Override public Builder setLabels(Map labels) { this.labels = Labels.fromUser(labels); return this; } @Override Builder setLocation(String location) { this.location = location; return this; } @Override Builder setTrainingRuns(List trainingRunList) { this.trainingRunList = checkNotNull(trainingRunList); return this; } @Override Builder setLabelColumns(List labelColumnList) { this.labelColumnList = checkNotNull(labelColumnList); return this; } @Override Builder setFeatureColumns(List featureColumnList) { this.featureColumnList = checkNotNull(featureColumnList); return this; } @Override public Builder setEncryptionConfiguration(EncryptionConfiguration configuration) { this.encryptionConfiguration = configuration; return this; } @Override public ModelInfo build() { return new ModelInfo(this); } } ModelInfo(BuilderImpl builder) { this.modelId = checkNotNull(builder.modelId); this.etag = builder.etag; this.modelType = builder.modelType; this.description = builder.description; this.friendlyName = builder.friendlyName; this.creationTime = builder.creationTime; this.lastModifiedTime = builder.lastModifiedTime; this.expirationTime = builder.expirationTime; this.labels = builder.labels; this.location = builder.location; this.trainingRunList = ImmutableList.copyOf(builder.trainingRunList); this.labelColumnList = ImmutableList.copyOf(builder.labelColumnList); this.featureColumnList = ImmutableList.copyOf(builder.featureColumnList); this.encryptionConfiguration = builder.encryptionConfiguration; } /** Returns the hash of the model resource. */ public String getEtag() { return etag; } /** Returns the model identity. */ public ModelId getModelId() { return modelId; } /** Returns the type of the ML model. */ public String getModelType() { return modelType; } /** Returns the user description of the model. */ public String getDescription() { return description; } /** Returns the user-friendly name for the model. */ public String getFriendlyName() { return friendlyName; } /** Returns the time when this model was created, in milliseconds since the epoch. */ public Long getCreationTime() { return creationTime; } /** Returns the time when this table was last modified, in milliseconds since the epoch. */ public Long getLastModifiedTime() { return lastModifiedTime; } /** * Returns this this model expires, in milliseconds since the epoch. If not present, the model * will persist indefinitely. Expired models will be deleted. */ public Long getExpirationTime() { return expirationTime; } /** Returns a map for labels applied to the model. */ public Map getLabels() { return labels.userMap(); } /** Returns a location of the model. */ public String getLocation() { return location; } /** Returns metadata about each training run iteration. */ @BetaApi public ImmutableList getTrainingRuns() { return trainingRunList; } /** Returns information about the label columns for this model. */ @BetaApi public ImmutableList getLabelColumns() { return labelColumnList; } /** Returns information about the feature columns for this model. */ @BetaApi public ImmutableList getFeatureColumns() { return featureColumnList; } public EncryptionConfiguration getEncryptionConfiguration() { return encryptionConfiguration; } public Builder toBuilder() { return new BuilderImpl(this); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("modelId", modelId) .add("etag", etag) .add("modelType", modelType) .add("description", description) .add("friendlyName", friendlyName) .add("creationTime", creationTime) .add("lastModifiedTime", lastModifiedTime) .add("expirationTime", expirationTime) .add("labels", labels) .add("location", location) .add("trainingRuns", trainingRunList) .add("labelColumns", labelColumnList) .add("featureColumns", featureColumnList) .add("encryptionConfiguration", encryptionConfiguration) .toString(); } @Override public int hashCode() { return Objects.hash(modelId); } @Override public boolean equals(Object obj) { return obj == this || obj != null && obj.getClass().equals(ModelInfo.class) && Objects.equals(toPb(), ((ModelInfo) obj).toPb()); } /** Returns a builder for a {@code ModelInfo} object given table identity. */ public static Builder newBuilder(ModelId modelId) { return new BuilderImpl().setModelId(modelId); } /** Returns a {@code ModelInfo} object given table identity. */ public static ModelInfo of(ModelId modelId) { return newBuilder(modelId).build(); } ModelInfo setProjectId(String projectId) { if (Strings.isNullOrEmpty(getModelId().getProject())) { return toBuilder().setModelId(getModelId().setProjectId(projectId)).build(); } return this; } Model toPb() { Model modelPb = new Model(); modelPb.setModelReference(modelId.toPb()); modelPb.setEtag(etag); modelPb.setModelType(modelType); modelPb.setDescription(description); modelPb.setFriendlyName(friendlyName); modelPb.setCreationTime(creationTime); modelPb.setLastModifiedTime(lastModifiedTime); modelPb.setExpirationTime(expirationTime); modelPb.setLabels(labels.toPb()); modelPb.setLocation(location); modelPb.setTrainingRuns(trainingRunList); if (labelColumnList != null) { modelPb.setLabelColumns(Lists.transform(labelColumnList, StandardSQLField.TO_PB_FUNCTION)); } if (featureColumnList != null) { modelPb.setFeatureColumns( Lists.transform(featureColumnList, StandardSQLField.TO_PB_FUNCTION)); } if (encryptionConfiguration != null) { modelPb.setEncryptionConfiguration(encryptionConfiguration.toPb()); } return modelPb; } static ModelInfo fromPb(Model modelPb) { return new BuilderImpl(modelPb).build(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy