Project
Projects are top-level containers in Google Cloud Platform. They store information about billing and authorized users, and they contain Cloud Spanner data. Each project has a friendly name and a unique ID.
Google::Cloud::Spanner::Project is the main object for interacting with Cloud Spanner.
Instance and Database objects are created, accessed, and managed by Google::Cloud::Spanner::Project.
A Client obtained from a project can be used to read and/or modify data in a Cloud Spanner database.
See new and Google::Cloud#spanner.
Inherits
- Object
Examples
Obtaining an instance and a database from a project.
require "google/cloud" spanner = Google::Cloud::Spanner.new instance = spanner.instance "my-instance" database = instance.database "my-database"
Obtaining a client for use with a database.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" db.transaction do |tx| results = tx.execute_query "SELECT * FROM users" results.rows.each do |row| puts "User #{row[:id]} is #{row[:name]}" end end
Methods
#batch_client
def batch_client(instance_id, database_id, labels: nil, query_options: nil) -> Client
Creates a Cloud Spanner batch client. A batch client is used to read data across multiple machines or processes.
- instance_id (String) — The unique identifier for the instance. Required.
- database_id (String) — The unique identifier for the database. Required.
-
labels (Hash) (defaults to: nil) —
The labels to be applied to all sessions created by the batch client. 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. They can be used to control how resource metrics are aggregated. And they can be used as arguments to policy management rules (e.g. route, firewall, load balancing, etc.). Optional. The default is
nil
.- Label keys must be between 1 and 63 characters long and must
conform to the following regular expression:
[a-z]([-a-z0-9]*[a-z0-9])?
. - Label values must be between 0 and 63 characters long and must
conform to the regular expression
([a-z]([-a-z0-9]*[a-z0-9])?)?
. - No more than 64 labels can be associated with a given resource.
- Label keys must be between 1 and 63 characters long and must
conform to the following regular expression:
-
query_options (Hash) (defaults to: nil) —
A hash of values to specify the custom query options for executing SQL query. Query options are optional. The following settings can be provided:
:optimizer_version
(String) The version of optimizer to use. Empty to use database default. "latest" to use the latest available optimizer version.:optimizer_statistics_package
(String) Statistics package to use. Empty to use the database default.
- (Client) — The newly created client.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new batch_client = spanner.batch_client "my-instance", "my-database" batch_snapshot = batch_client.batch_snapshot serialized_snapshot = batch_snapshot.dump partitions = batch_snapshot.partition_read "users", [:id, :name] partition = partitions.first serialized_partition = partition.dump # In a separate process new_batch_snapshot = batch_client.load_batch_snapshot \ serialized_snapshot new_partition = batch_client.load_partition \ serialized_partition results = new_batch_snapshot.execute_partition \ new_partition
#client
def client(instance_id, database_id, pool: {}, labels: nil, query_options: nil) -> Client
Creates a Cloud Spanner client. A client is used to read and/or modify data in a Cloud Spanner database.
- instance_id (String) — The unique identifier for the instance. Required.
- database_id (String) — The unique identifier for the database. Required.
-
pool (Hash) (defaults to: {}) —
Settings to control how and when sessions are managed by the client. The following settings can be provided:
:min
(Integer) Minimum number of sessions that the client will maintain at any point in time. The default is 10.:max
(Integer) Maximum number of sessions that the client will have at any point in time. The default is 100.:keepalive
(Numeric) The amount of time a session can be idle before an attempt is made to prevent the idle sessions from being closed by the Cloud Spanner service. The default is 1800 (30 minutes).:write_ratio
(Float) The ratio of sessions with pre-allocated transactions to those without. Pre-allocating transactions improves the performance of writes made by the client. The higher the value, the more transactions are pre-allocated. The value must be >= 0 and <= 1. The default is 0.3.:fail
(true/false) Whentrue
the client raises a SessionLimitError when the client has allocated themax
number of sessions. Whenfalse
the client blocks until a session becomes available. The default istrue
.:threads
(Integer) The number of threads in the thread pool. The default is twice the number of available CPUs.
-
labels (Hash) (defaults to: nil) —
The labels to be applied to all sessions created by the client. 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. They can be used to control how resource metrics are aggregated. And they can be used as arguments to policy management rules (e.g. route, firewall, load balancing, etc.). Optional. The default is
nil
.- Label keys must be between 1 and 63 characters long and must
conform to the following regular expression:
[a-z]([-a-z0-9]*[a-z0-9])?
. - Label values must be between 0 and 63 characters long and must
conform to the regular expression
([a-z]([-a-z0-9]*[a-z0-9])?)?
. - No more than 64 labels can be associated with a given resource.
- Label keys must be between 1 and 63 characters long and must
conform to the following regular expression:
-
query_options (Hash) (defaults to: nil) —
A hash of values to specify the custom query options for executing SQL query. Query options are optional. The following settings can be provided:
:optimizer_version
(String) The version of optimizer to use. Empty to use database default. "latest" to use the latest available optimizer version.:optimizer_statistics_package
(String) Statistics package to use. Empty to use the database default.
- (Client) — The newly created client.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" db.transaction do |tx| results = tx.execute_query "SELECT * FROM users" results.rows.each do |row| puts "User #{row[:id]} is #{row[:name]}" end end
#create_database
def create_database(instance_id, database_id, statements: [], encryption_config: nil) -> Database::Job
Creates a database and starts preparing it to begin serving.
See {Database::Job}.
{Google::Cloud::Spanner::Admin::Database#database_admin Client#create_database} instead.
- instance_id (String) — The unique identifier for the instance. Required.
-
database_id (String) — The unique identifier for the database,
which cannot be changed after the database is created. Values are of
the form
[a-z][a-z0-9_\-]*[a-z0-9]
and must be between 2 and 30 characters in length. Required. - statements (Array<String>) (defaults to: []) — DDL statements to run inside the newly created database. Statements can create tables, indexes, etc. These statements execute atomically with the creation of the database: if there is an error in any statement, the database is not created. Optional.
-
encryption_config (Hash) (defaults to: nil) —
An encryption configuration describing the encryption type and key resources in Cloud KMS. Optional. The following settings can be provided:
:kms_key_name
(String) The name of KMS key to use which should be the full path, e.g.,projects/<project>/locations/<location>\ /keyRings/<key_ring>/cryptoKeys/<kms_key_name>
- (Database::Job) — The job representing the long-running, asynchronous processing of a database create operation.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new job = spanner.create_database "my-instance", "my-new-database" job.done? #=> false job.reload! # API call job.done? #=> true if job.error? status = job.error else database = job.database end
Create with encryption config
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new kms_key_name = "projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>" encryption_config = { kms_key_name: kms_key_name } job = spanner.create_database "my-instance", "my-new-database", encryption_config: encryption_config job.done? #=> false job.reload! # API call job.done? #=> true if job.error? status = job.error else database = job.database end
#create_instance
def create_instance(instance_id, name: nil, config: nil, nodes: nil, processing_units: nil, labels: nil) -> Instance::Job
Creates a Cloud Spanner instance and starts preparing it to begin serving.
See {Instance::Job}.
{Google::Cloud::Spanner::Admin::Instance#instance_admin Client#create_instance} instead.
-
instance_id (String) — The unique identifier for the instance,
which cannot be changed after the instance is created. Values are of
the form
[a-z][-a-z0-9]*[a-z0-9]
and must be between 6 and 30 characters in length. Required. - name (String) (defaults to: nil) — The descriptive name for this instance as it appears in UIs. Must be unique per project and between 4 and 30 characters in length. Required.
-
config (String, Instance::Config) (defaults to: nil) — The name of the instance's
configuration. Values can be the
instance_config_id
, the full path, or an Instance::Config object. Required. -
nodes (Integer) (defaults to: nil) — The number of nodes allocated to this instance.
Optional. Specify either
nodes
orprocessing_units
-
processing_units (Integer) (defaults to: nil) — The number of processing units
allocated to this instance. Optional. Specify either
nodes
orprocessing_units
-
labels (Hash) (defaults to: nil) —
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. They can be used to control how resource metrics are aggregated. And they can be used as arguments to policy management rules (e.g. route, firewall, load balancing, etc.).
- Label keys must be between 1 and 63 characters long and must
conform to the following regular expression:
[a-z]([-a-z0-9]*[a-z0-9])?
. - Label values must be between 0 and 63 characters long and must
conform to the regular expression
([a-z]([-a-z0-9]*[a-z0-9])?)?
. - No more than 64 labels can be associated with a given resource.
- Label keys must be between 1 and 63 characters long and must
conform to the following regular expression:
- (Instance::Job) — The job representing the long-running, asynchronous processing of an instance create operation.
- (ArgumentError) — if both processing_units or nodes are specified.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new job = spanner.create_instance "my-new-instance", name: "My New Instance", config: "regional-us-central1", nodes: 5, labels: { production: :env } job.done? #=> false job.reload! # API call job.done? #=> true if job.error? status = job.error else instance = job.instance end
Create instance using processsing units
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new job = spanner.create_instance "my-new-instance", name: "My New Instance", config: "regional-us-central1", processing_units: 500, labels: { production: :env } job.done? #=> false job.reload! # API call job.done? #=> true if job.error? status = job.error else instance = job.instance end
#database
def database(instance_id, database_id) -> Google::Cloud::Spanner::Database, nil
Retrieves a database by unique identifier.
{Google::Cloud::Spanner::Admin::Database#database_admin Client#get_database} instead.
- instance_id (String) — The unique identifier for the instance.
- database_id (String) — The unique identifier for the database.
-
(Google::Cloud::Spanner::Database, nil) — The database, or
nil
if the database does not exist.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new database = spanner.database "my-instance", "my-database"
Will return nil
if instance does not exist.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new database = spanner.database "my-instance", "my-database" # nil
#databases
def databases(instance_id, token: nil, max: nil) -> Array<Google::Cloud::Spanner::Database>
Retrieves the list of databases for the project.
{Google::Cloud::Spanner::Admin::Database#database_admin Client#list_databases} instead.
- instance_id (String) — The unique identifier for the instance.
-
token (String) (defaults to: nil) — The
token
value returned by the last call todatabases
; indicates that this is a continuation of a call, and that the system should return the next page of data. - max (Integer) (defaults to: nil) — Maximum number of databases to return.
- (Array<Google::Cloud::Spanner::Database>) — The list of databases. (See Database::List)
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new databases = spanner.databases "my-instance" databases.each do |database| puts database.database_id end
Retrieve all: (See Instance::Config::List#all)
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new databases = spanner.databases "my-instance" databases.all do |database| puts database.database_id end
#instance
def instance(instance_id) -> Google::Cloud::Spanner::Instance, nil
Retrieves a Cloud Spanner instance by unique identifier.
{Google::Cloud::Spanner::Admin::Instance#instance_admin Client#get_instance} instead.
- instance_id (String) — The unique identifier for the instance.
-
(Google::Cloud::Spanner::Instance, nil) — The instance, or
nil
if the instance does not exist.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new instance = spanner.instance "my-instance"
Will return nil
if instance does not exist.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new instance = spanner.instance "non-existing" # nil
#instance_config
def instance_config(instance_config_id) -> Google::Cloud::Spanner::Instance::Config, nil
Retrieves an instance configuration by unique identifier.
{Google::Cloud::Spanner::Admin::Instance#instance_admin Client#get_instance_config} instead.
-
instance_config_id (String) — The instance configuration
identifier. Values can be the
instance_config_id
, or the full path.
-
(Google::Cloud::Spanner::Instance::Config, nil) — The instance
configuration, or
nil
if the instance configuration does not exist.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new config = spanner.instance_config "regional-us-central1"
Will return nil
if instance config does not exist.
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new config = spanner.instance_config "non-existing" # nil
#instance_configs
def instance_configs(token: nil, max: nil) -> Array<Google::Cloud::Spanner::Instance::Config>
Retrieves the list of instance configurations for the project.
{Google::Cloud::Spanner::Admin::Instance#instance_admin Client#list_instance_configs} instead.
-
token (String) (defaults to: nil) — The
token
value returned by the last call toinstance_configs
; indicates that this is a continuation of a call, and that the system should return the next page of data. - max (Integer) (defaults to: nil) — Maximum number of instance configs to return.
- (Array<Google::Cloud::Spanner::Instance::Config>) — The list of instance configurations. (See Instance::Config::List)
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new instance_configs = spanner.instance_configs instance_configs.each do |config| puts config.instance_config_id end
Retrieve all: (See Instance::Config::List#all)
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new instance_configs = spanner.instance_configs instance_configs.all do |config| puts config.instance_config_id end
#instances
def instances(token: nil, max: nil) -> Array<Google::Cloud::Spanner::Instance>
Retrieves the list of Cloud Spanner instances for the project.
{Google::Cloud::Spanner::Admin::Instance#instance_admin Client#list_instances} instead.
-
token (String) (defaults to: nil) — The
token
value returned by the last call toinstances
; indicates that this is a continuation of a call, and that the system should return the next page of data. - max (Integer) (defaults to: nil) — Maximum number of instances to return.
- (Array<Google::Cloud::Spanner::Instance>) — The list of instances. (See Instance::List)
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new instances = spanner.instances instances.each do |instance| puts instance.instance_id end
Retrieve all: (See Instance::Config::List#all)
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new instances = spanner.instances instances.all do |instance| puts instance.instance_id end
#project
def project()
The identifier for the Cloud Spanner project.
require "google/cloud" spanner = Google::Cloud::Spanner.new( project_id: "my-project", credentials: "/path/to/keyfile.json" ) spanner.project_id #=> "my-project"
#project_id
def project_id()
The identifier for the Cloud Spanner project.
require "google/cloud" spanner = Google::Cloud::Spanner.new( project_id: "my-project", credentials: "/path/to/keyfile.json" ) spanner.project_id #=> "my-project"