Reference documentation and code samples for the Cloud Bigtable API class Google::Cloud::Bigtable::Instance.
Instance
Represents a Bigtable instance. Instances are dedicated Bigtable storage resources that contain Bigtable tables.
See Project#instances, Project#instance, and Project#create_instance.
Inherits
- Object
Example
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new job = bigtable.create_instance( "my-instance", display_name: "Instance for user data", type: :DEVELOPMENT, labels: { "env" => "dev" } ) do |clusters| clusters.add "test-cluster", "us-east1-b" # nodes not allowed end job.done? #=> false # To block until the operation completes. job.wait_until_done! job.done? #=> true if job.error? status = job.error else instance = job.instance end
Methods
#app_profile
def app_profile(app_profile_id) -> Google::Cloud::Bigtable::AppProfile, nil
- app_profile_id (String) — The unique name of the requested app profile.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" app_profile = instance.app_profile "my-app-profile" if app_profile puts app_profile.name end
#app_profiles
def app_profiles() -> Array<Google::Cloud::Bigtable::AppProfile>
- (Array<Google::Cloud::Bigtable::AppProfile>) — (See AppProfile::List)
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" instance.app_profiles.all do |app_profile| puts app_profile.name end
#cluster
def cluster(cluster_id) -> Google::Cloud::Bigtable::Cluster, nil
- cluster_id (String) — The unique ID of the requested cluster.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" cluster = instance.cluster "my-cluster" puts cluster.cluster_id
#clusters
def clusters(token: nil) -> Array<Google::Cloud::Bigtable::Cluster>
-
token (String) (defaults to: nil) — The
token
value returned by the last call toclusters
; indicates that this is a continuation of a call and that the system should return the next page of data.
- (Array<Google::Cloud::Bigtable::Cluster>) — See(Cluster::List)
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" instance.clusters.all do |cluster| puts cluster.cluster_id end
#create_app_profile
def create_app_profile(name, routing_policy, description: nil, etag: nil, ignore_warnings: false) -> Google::Cloud::Bigtable::AppProfile
Creates an app profile for the instance with a routing policy. Only one routing policy can applied to the app profile. The policy can be multi-cluster routing or single cluster routing.
- name (String) — Unique ID of the app profile.
-
routing_policy (Google::Cloud::Bigtable::RoutingPolicy) —
The routing policy for all read/write requests that use this app profile. A value must be explicitly set.
Routing Policies:
- MultiClusterRoutingUseAny - Read/write requests may be routed to any cluster in the instance and will fail over to another cluster in the event of transient errors or delays. Choosing this option sacrifices read-your-writes consistency to improve availability.
- SingleClusterRouting - Unconditionally
routes all read/write requests to a specific cluster. This option
preserves read-your-writes consistency but does not improve
availability. Value contains
cluster_id
and optional fieldallow_transactional_writes
.
- description (String) (defaults to: nil) — Description of the use case for this app profile.
-
etag (String) (defaults to: nil) — Strongly validated etag for optimistic concurrency control. Preserve the
value returned from
GetAppProfile
when callingUpdateAppProfile
to fail the request if there has been a modification in the meantime. Theupdate_mask
of the request need not includeetag
for this protection to apply. See Wikipedia and RFC 7232 for more details. -
ignore_warnings (Boolean) (defaults to: false) — If true, ignore safety checks when creating the app profile.
Default value is
false
.
Create an app profile with a single cluster routing policy.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" routing_policy = Google::Cloud::Bigtable::AppProfile.single_cluster_routing( "my-cluster", allow_transactional_writes: true ) app_profile = instance.create_app_profile( "my-app-profile", routing_policy, description: "App profile for user data instance" ) puts app_profile.name
Create an app profile with multi-cluster routing policy.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" routing_policy = Google::Cloud::Bigtable::AppProfile.multi_cluster_routing app_profile = instance.create_app_profile( "my-app-profile", routing_policy, description: "App profile for user data instance" ) puts app_profile.name
Create app profile and ignore warnings.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" routing_policy = Google::Cloud::Bigtable::AppProfile.multi_cluster_routing app_profile = instance.create_app_profile( "my-app-profile", routing_policy, description: "App profile for user data instance", ignore_warnings: true ) puts app_profile.name
#create_cluster
def create_cluster(cluster_id, location, nodes: nil, storage_type: nil) -> Google::Cloud::Bigtable::Cluster::Job
Creates a cluster in the instance.
- cluster_id (String) — The ID to be used when referring to the new cluster within its instance.
- location (String) — The location where this cluster's nodes and storage reside. For best performance, clients should be located as close as possible to this cluster. Example: "us-east-1b"
- nodes (Integer) (defaults to: nil) — The number of nodes allocated to this cluster. More nodes enable higher throughput and more consistent performance.
-
storage_type (Symbol) (defaults to: nil) —
Storage type. The type of storage used by this cluster to serve its parent instance's tables. Valid types are:
:SSD
- Flash (SSD) storage.:HDD
- Magnetic drive (HDD).
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" job = instance.create_cluster( "my-new-cluster", "us-east-1b", nodes: 3, storage_type: :SSD ) job.done? #=> false # To block until the operation completes. job.wait_until_done! job.done? #=> true if job.error? status = job.error else cluster = job.cluster end
#create_table
def create_table(name, column_families: nil, granularity: nil, initial_splits: nil, &block) { |column_families| ... } -> Google::Cloud::Bigtable::Table
Creates a new table in the instance.
The table can be created with a full set of initial column families, specified in the request.
- name (String) — The name by which the new table should be referred to within the parent instance.
- column_families (Google::Cloud::Bigtable::ColumnFamilyMap) (defaults to: nil) — An object containing the column families for the table, mapped by column family name.
-
granularity (Symbol) (defaults to: nil) — The granularity at which timestamps are stored in this table.
Timestamps not matching the granularity will be rejected.
Valid value is
:MILLIS
. If unspecified, the value will be set to:MILLIS
. -
initial_splits (Array<String>) (defaults to: nil) —
The optional list of row keys that will be used to initially split the table into several tablets (tablets are similar to HBase regions). Given two split keys,
s1
ands2
, three tablets will be created, spanning the key ranges:[, s1), [s1, s2), [s2, )
.Example:
- Row keys :=
["a", "apple", "custom", "customer_1", "customer_2", "other", "zz"]
- initial_split_keys :=
["apple", "customer_1", "customer_2", "other"]
- Key assignment:
- Tablet 1 :
[, apple) => {"a"}
- Tablet 2 :
[apple, customer_1) => {"apple", "custom"}
- Tablet 3 :
[customer_1, customer_2) => {"customer_1"}
- Tablet 4 :
[customer_2, other) => {"customer_2"}
- Tablet 5 :
[other, ) => {"other", "zz"}
A hash in the form ofGoogle::Cloud::Bigtable::Admin::V2::CreateTableRequest::Split
can also be provided.
- Tablet 1 :
- Row keys :=
- (column_families) — A block for adding column families.
- column_families (Google::Cloud::Bigtable::ColumnFamilyMap) — A mutable object containing the column families for the table, mapped by column family name.
Create a table without column families.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" table = instance.create_table "my-table" puts table.name
Create a table with initial splits and column families.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" initial_splits = ["user-00001", "user-100000", "others"] table = instance.create_table "my-table", initial_splits: initial_splits do |cfm| cfm.add "cf1", gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5) cfm.add "cf2", gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600) gc_rule = Google::Cloud::Bigtable::GcRule.union( Google::Cloud::Bigtable::GcRule.max_age(1800), Google::Cloud::Bigtable::GcRule.max_versions(3) ) cfm.add "cf3", gc_rule: gc_rule end puts table
#creating?
def creating?() -> Boolean
The instance is currently being created and may be destroyed if the creation process encounters an error.
- (Boolean)
#delete
def delete() -> Boolean
Permanently deletes the instance from the project.
-
(Boolean) — Returns
true
if the instance was deleted.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" instance.delete
#development?
def development?() -> Boolean
The instance is meant for development and testing purposes only; it has
no performance or uptime guarantees and is not covered by SLA.
After a development instance is created, it can be upgraded by
updating the instance to type :PRODUCTION
. An instance created
as a production instance cannot be changed to a development instance.
When creating a development instance, nodes
on the cluster must
not be set. (See #create_cluster.)
- (Boolean)
#display_name
def display_name() -> String
The descriptive name for the instance as it appears in UIs. Must be unique per project and between 4 and 30 characters long.
- (String)
#display_name=
def display_name=(value)
Updates the descriptive name for the instance as it appears in UIs. Can be changed at any time, but should be kept globally unique to avoid confusion.
- value (String) — The descriptive name for the instance.
#instance_id
def instance_id() -> String
The unique identifier for the instance.
- (String)
#labels
def labels() -> Hash{String=>String}
Gets the Cloud Labels for the instance.
Cloud Labels are a flexible and lightweight mechanism for organizing cloud resources into groups that reflect a customer's organizational needs and deployment strategies. Cloud Labels can be used to filter collections of resources, to control how resource metrics are aggregated, and as arguments to policy management rules (e.g., route, firewall, load balancing, etc.).
- (Hash{String=>String}) — The label keys and values in a hash.
#labels=
def labels=(labels)
Sets the Cloud Labels for the instance.
- labels (Hash{String=>String}) — The Cloud Labels.
#path
def path() -> String
The full path for the instance resource. Values are of the form
projects/<project_id>/instances/<instance_id>
.
- (String)
#policy
def policy() { |policy| ... } -> Policy
Gets the Cloud IAM access control policy for the instance.
- (policy) — A block for updating the policy. The latest policy will be read from the Bigtable service and passed to the block. After the block completes, the modified policy will be written to the service.
- policy (Policy) — the current Cloud IAM Policy for this instance.
- (Policy) — The current Cloud IAM Policy for the instance.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" policy = instance.policy
Update the policy by passing a block.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" instance.policy do |p| p.add "roles/owner", "user:owner@example.com" end # 2 API calls
#policy=
def policy=(new_policy) -> Policy
Updates the Cloud IAM access control
policy for the instance. The policy should be read from #policy.
See Policy for an explanation of the policy
etag
property and how to modify policies.
You can also update the policy by passing a block to #policy, which will call this method internally after the block completes.
- new_policy (Policy) — a new or modified Cloud IAM Policy for this instance
- (Policy) — The policy returned by the API update operation.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" policy = instance.policy policy.add "roles/owner", "user:owner@example.com" updated_policy = instance.update_policy policy puts updated_policy.roles
#production?
def production?() -> Boolean
An instance meant for production use. Requires that nodes
must be set
on the cluster. (See #create_cluster.)
- (Boolean)
#project_id
def project_id() -> String
The unique identifier for the project to which the instance belongs.
- (String)
#ready?
def ready?() -> Boolean
The instance has been successfully created and can serve requests to its tables.
- (Boolean)
#reload!
def reload!() -> Google::Cloud::Bigtable::Instance
Reloads instance data.
#save
def save() -> Google::Cloud::Bigtable::Instance::Job
Updates the instance.
Updatable attributes are:
display_name
- The descriptive name for the instance.type
-:DEVELOPMENT
type instance can be upgraded to:PRODUCTION
instance. An instance created as a production instance cannot be changed to a development instance.labels
- Cloud Labels are a flexible and lightweight mechanism for organizing cloud resources.
- (Google::Cloud::Bigtable::Instance::Job) — The job representing the long-running, asynchronous processing of an instance update operation.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" instance.display_name = "My app dev instance" # Set display name instance.labels = { env: "dev", data: "users" } job = instance.save job.done? #=> false # Reload job until completion. job.wait_until_done! job.done? #=> true if job.error? puts job.error else instance = job.instance puts instance.name puts instance.labels end
#state
def state() -> Symbol
The current instance state. Possible values are :CREATING
,
:READY
, :STATE_NOT_KNOWN
.
- (Symbol)
#table
def table(table_id, view: nil, perform_lookup: nil, app_profile_id: nil) -> Google::Cloud::Bigtable::Table
Gets metadata information of a table in the instance.
-
view (Symbol) (defaults to: nil) —
The view to be applied to the returned tables' fields. Defaults to
SCHEMA_VIEW
if unspecified. Valid view types are.:NAME_ONLY
- Only populatesname
:SCHEMA_VIEW
- Only populatesname
and fields related to the table's schema:REPLICATION_VIEW
- Only populatesname
and fields related to the table's replication state.:FULL
- Populates all fields
-
perform_lookup (Boolean) (defaults to: nil) — Creates table object without verifying
that the table resource exists.
Calls made on this object will raise errors if the table
does not exist. Default value is
false
. Optional. Helps to reduce admin API calls. - app_profile_id (String) (defaults to: nil) — The unique identifier for the app profile. Optional. Used only in data operations. This value specifies routing for replication. If not specified, the "default" application profile will be used.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" table = instance.table "my-table", perform_lookup: true puts table.name puts table.column_families # Name-only view table = instance.table "my-table", view: :NAME_ONLY, perform_lookup: true puts table.name
Mutate rows.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new table = bigtable.table "my-instance", "my-table" entry = table.new_mutation_entry "user-1" entry.set_cell( "cf1", "field1", "XYZ", timestamp: (Time.now.to_f * 1_000_000).round(-3) # microseconds ).delete_cells "cf2", "field02" table.mutate_row entry
#tables
def tables() -> Array<Google::Cloud::Bigtable::Table>
- (Array<Google::Cloud::Bigtable::Table>) — (See Table::List)
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" # Default name-only view instance.tables.all do |table| puts table.name end
#test_iam_permissions
def test_iam_permissions(*permissions) -> Array<String>
Tests the specified permissions against the Cloud IAM access control policy.
-
permissions (String, Array<String>) —
permissions The set of permissions to check access for. Permissions with wildcards (such as
*
orbigtable.*
) are not allowed. See Access Control.Some of the permissions that can be checked on a instance are:
- bigtable.instances.create
- bigtable.instances.list
- bigtable.instances.get
- bigtable.tables.create
- bigtable.tables.delete
- bigtable.tables.get
- bigtable.tables.list
- (Array<String>) — The permissions that are configured for the policy.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" permissions = instance.test_iam_permissions( "bigtable.instances.get", "bigtable.instances.update" ) permissions.include? "bigtable.instances.get" #=> true permissions.include? "bigtable.instances.update" #=> false
#type
def type() -> Symbol
Instance type. Possible values include :DEVELOPMENT
and :PRODUCTION
.
- (Symbol)
#type=
def type=(instance_type)
Sets the instance type.
Valid values are :DEVELOPMENT
and :PRODUCTION
.
After a development instance is created, it can be upgraded
by updating the instance to type :PRODUCTION
.
An instance created as a production instance cannot be changed to a
development instance.
- instance_type (Symbol)
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" instance.development? # true instance.type = :PRODUCTION instance.development? # false instance.production? # true
#update
def update() -> Google::Cloud::Bigtable::Instance::Job
Updates the instance.
Updatable attributes are:
display_name
- The descriptive name for the instance.type
-:DEVELOPMENT
type instance can be upgraded to:PRODUCTION
instance. An instance created as a production instance cannot be changed to a development instance.labels
- Cloud Labels are a flexible and lightweight mechanism for organizing cloud resources.
- (Google::Cloud::Bigtable::Instance::Job) — The job representing the long-running, asynchronous processing of an instance update operation.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" instance.display_name = "My app dev instance" # Set display name instance.labels = { env: "dev", data: "users" } job = instance.save job.done? #=> false # Reload job until completion. job.wait_until_done! job.done? #=> true if job.error? puts job.error else instance = job.instance puts instance.name puts instance.labels end
#update_policy
def update_policy(new_policy) -> Policy
Updates the Cloud IAM access control
policy for the instance. The policy should be read from #policy.
See Policy for an explanation of the policy
etag
property and how to modify policies.
You can also update the policy by passing a block to #policy, which will call this method internally after the block completes.
- new_policy (Policy) — a new or modified Cloud IAM Policy for this instance
- (Policy) — The policy returned by the API update operation.
require "google/cloud/bigtable" bigtable = Google::Cloud::Bigtable.new instance = bigtable.instance "my-instance" policy = instance.policy policy.add "roles/owner", "user:owner@example.com" updated_policy = instance.update_policy policy puts updated_policy.roles