google-cloud-bigtable 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +19 -0
- data/AUTHENTICATION.md +177 -0
- data/CHANGELOG.md +223 -0
- data/CODE_OF_CONDUCT.md +40 -0
- data/CONTRIBUTING.md +188 -0
- data/EMULATOR.md +30 -0
- data/LICENSE +201 -0
- data/LOGGING.md +32 -0
- data/OVERVIEW.md +400 -0
- data/TROUBLESHOOTING.md +31 -0
- data/lib/google-cloud-bigtable.rb +171 -0
- data/lib/google/bigtable/admin/v2/bigtable_instance_admin_pb.rb +145 -0
- data/lib/google/bigtable/admin/v2/bigtable_instance_admin_services_pb.rb +90 -0
- data/lib/google/bigtable/admin/v2/bigtable_table_admin_pb.rb +208 -0
- data/lib/google/bigtable/admin/v2/bigtable_table_admin_services_pb.rb +154 -0
- data/lib/google/bigtable/admin/v2/common_pb.rb +30 -0
- data/lib/google/bigtable/admin/v2/instance_pb.rb +74 -0
- data/lib/google/bigtable/admin/v2/table_pb.rb +127 -0
- data/lib/google/bigtable/v2/bigtable_pb.rb +113 -0
- data/lib/google/bigtable/v2/bigtable_services_pb.rb +68 -0
- data/lib/google/bigtable/v2/data_pb.rb +156 -0
- data/lib/google/cloud/bigtable.rb +184 -0
- data/lib/google/cloud/bigtable/admin.rb +202 -0
- data/lib/google/cloud/bigtable/admin/credentials.rb +27 -0
- data/lib/google/cloud/bigtable/admin/v2.rb +223 -0
- data/lib/google/cloud/bigtable/admin/v2/bigtable_instance_admin_client.rb +1451 -0
- data/lib/google/cloud/bigtable/admin/v2/bigtable_instance_admin_client_config.json +139 -0
- data/lib/google/cloud/bigtable/admin/v2/bigtable_table_admin_client.rb +1734 -0
- data/lib/google/cloud/bigtable/admin/v2/bigtable_table_admin_client_config.json +163 -0
- data/lib/google/cloud/bigtable/admin/v2/credentials.rb +51 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/bigtable/admin/v2/bigtable_instance_admin.rb +297 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/bigtable/admin/v2/bigtable_table_admin.rb +587 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/bigtable/admin/v2/instance.rb +193 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/bigtable/admin/v2/table.rb +303 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/iam/v1/iam_policy.rb +64 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/iam/v1/options.rb +33 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/iam/v1/policy.rb +151 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/longrunning/operations.rb +51 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/any.rb +131 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/duration.rb +91 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/empty.rb +29 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/field_mask.rb +222 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/timestamp.rb +113 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/rpc/status.rb +39 -0
- data/lib/google/cloud/bigtable/admin/v2/doc/google/type/expr.rb +45 -0
- data/lib/google/cloud/bigtable/app_profile.rb +439 -0
- data/lib/google/cloud/bigtable/app_profile/job.rb +99 -0
- data/lib/google/cloud/bigtable/app_profile/list.rb +165 -0
- data/lib/google/cloud/bigtable/backup.rb +324 -0
- data/lib/google/cloud/bigtable/backup/job.rb +87 -0
- data/lib/google/cloud/bigtable/backup/list.rb +167 -0
- data/lib/google/cloud/bigtable/chunk_processor.rb +241 -0
- data/lib/google/cloud/bigtable/cluster.rb +390 -0
- data/lib/google/cloud/bigtable/cluster/job.rb +88 -0
- data/lib/google/cloud/bigtable/cluster/list.rb +171 -0
- data/lib/google/cloud/bigtable/column_family.rb +73 -0
- data/lib/google/cloud/bigtable/column_family_map.rb +426 -0
- data/lib/google/cloud/bigtable/column_range.rb +194 -0
- data/lib/google/cloud/bigtable/convert.rb +83 -0
- data/lib/google/cloud/bigtable/credentials.rb +25 -0
- data/lib/google/cloud/bigtable/errors.rb +38 -0
- data/lib/google/cloud/bigtable/gc_rule.rb +334 -0
- data/lib/google/cloud/bigtable/instance.rb +935 -0
- data/lib/google/cloud/bigtable/instance/cluster_map.rb +74 -0
- data/lib/google/cloud/bigtable/instance/job.rb +98 -0
- data/lib/google/cloud/bigtable/instance/list.rb +164 -0
- data/lib/google/cloud/bigtable/longrunning_job.rb +122 -0
- data/lib/google/cloud/bigtable/mutation_entry.rb +256 -0
- data/lib/google/cloud/bigtable/mutation_operations.rb +357 -0
- data/lib/google/cloud/bigtable/policy.rb +167 -0
- data/lib/google/cloud/bigtable/project.rb +471 -0
- data/lib/google/cloud/bigtable/read_modify_write_rule.rb +134 -0
- data/lib/google/cloud/bigtable/read_operations.rb +328 -0
- data/lib/google/cloud/bigtable/routing_policy.rb +172 -0
- data/lib/google/cloud/bigtable/row.rb +136 -0
- data/lib/google/cloud/bigtable/row_filter.rb +639 -0
- data/lib/google/cloud/bigtable/row_filter/chain_filter.rb +590 -0
- data/lib/google/cloud/bigtable/row_filter/condition_filter.rb +114 -0
- data/lib/google/cloud/bigtable/row_filter/interleave_filter.rb +621 -0
- data/lib/google/cloud/bigtable/row_filter/simple_filter.rb +287 -0
- data/lib/google/cloud/bigtable/row_range.rb +179 -0
- data/lib/google/cloud/bigtable/rows_mutator.rb +113 -0
- data/lib/google/cloud/bigtable/rows_reader.rb +200 -0
- data/lib/google/cloud/bigtable/sample_row_key.rb +85 -0
- data/lib/google/cloud/bigtable/service.rb +913 -0
- data/lib/google/cloud/bigtable/status.rb +76 -0
- data/lib/google/cloud/bigtable/table.rb +686 -0
- data/lib/google/cloud/bigtable/table/cluster_state.rb +125 -0
- data/lib/google/cloud/bigtable/table/list.rb +154 -0
- data/lib/google/cloud/bigtable/table/restore_job.rb +117 -0
- data/lib/google/cloud/bigtable/v2.rb +146 -0
- data/lib/google/cloud/bigtable/v2/bigtable_client.rb +591 -0
- data/lib/google/cloud/bigtable/v2/bigtable_client_config.json +83 -0
- data/lib/google/cloud/bigtable/v2/credentials.rb +46 -0
- data/lib/google/cloud/bigtable/v2/doc/google/bigtable/v2/bigtable.rb +290 -0
- data/lib/google/cloud/bigtable/v2/doc/google/bigtable/v2/data.rb +493 -0
- data/lib/google/cloud/bigtable/v2/doc/google/protobuf/any.rb +131 -0
- data/lib/google/cloud/bigtable/v2/doc/google/protobuf/wrappers.rb +34 -0
- data/lib/google/cloud/bigtable/v2/doc/google/rpc/status.rb +39 -0
- data/lib/google/cloud/bigtable/value_range.rb +181 -0
- data/lib/google/cloud/bigtable/version.rb +22 -0
- metadata +337 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2018 Google LLC
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
require "delegate"
|
|
19
|
+
|
|
20
|
+
module Google
|
|
21
|
+
module Cloud
|
|
22
|
+
module Bigtable
|
|
23
|
+
class Cluster
|
|
24
|
+
##
|
|
25
|
+
# Cluster::List is a special case Array with additional
|
|
26
|
+
# values.
|
|
27
|
+
class List < DelegateClass(::Array)
|
|
28
|
+
# @private
|
|
29
|
+
# The gRPC Service object.
|
|
30
|
+
attr_accessor :service
|
|
31
|
+
|
|
32
|
+
# @private
|
|
33
|
+
# Instance ID
|
|
34
|
+
attr_accessor :instance_id
|
|
35
|
+
|
|
36
|
+
##
|
|
37
|
+
# If not empty, indicates that there are more records that match
|
|
38
|
+
# the request and this value should be passed to continue.
|
|
39
|
+
attr_accessor :token
|
|
40
|
+
|
|
41
|
+
##
|
|
42
|
+
# Locations from which cluster information could not be retrieved,
|
|
43
|
+
# due to an outage or some other transient condition.
|
|
44
|
+
# Clusters from these locations may be missing from `clusters`
|
|
45
|
+
# or may only have partial information returned.
|
|
46
|
+
attr_accessor :failed_locations
|
|
47
|
+
|
|
48
|
+
# @private
|
|
49
|
+
# Create a new Cluster::List with an array of
|
|
50
|
+
# Cluster instances.
|
|
51
|
+
def initialize arr = []
|
|
52
|
+
super arr
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
##
|
|
56
|
+
# Whether there is a next page of clusters.
|
|
57
|
+
#
|
|
58
|
+
# @return [Boolean]
|
|
59
|
+
#
|
|
60
|
+
# @example
|
|
61
|
+
# require "google/cloud/bigtable"
|
|
62
|
+
#
|
|
63
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
64
|
+
#
|
|
65
|
+
# clusters = bigtable.clusters
|
|
66
|
+
# if clusters.next?
|
|
67
|
+
# next_clusters = clusters.next
|
|
68
|
+
# end
|
|
69
|
+
#
|
|
70
|
+
def next?
|
|
71
|
+
!token.nil?
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
##
|
|
75
|
+
# Retrieve the next page of clusters.
|
|
76
|
+
#
|
|
77
|
+
# @return [Cluster::List] The list of clusters.
|
|
78
|
+
#
|
|
79
|
+
# @example
|
|
80
|
+
# require "google/cloud/bigtable"
|
|
81
|
+
#
|
|
82
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
83
|
+
#
|
|
84
|
+
# clusters = bigtable.clusters
|
|
85
|
+
# if clusters.next?
|
|
86
|
+
# next_clusters = clusters.next
|
|
87
|
+
# end
|
|
88
|
+
#
|
|
89
|
+
def next
|
|
90
|
+
return nil unless next?
|
|
91
|
+
ensure_service!
|
|
92
|
+
grpc = service.list_clusters instance_id, token: token
|
|
93
|
+
next_list = self.class.from_grpc grpc, service, instance_id: instance_id
|
|
94
|
+
next_list.failed_locations.concat(failed_locations.map(&:to_s)) if failed_locations
|
|
95
|
+
next_list
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
##
|
|
99
|
+
# Retrieves remaining results by repeatedly invoking {#next} until
|
|
100
|
+
# {#next?} returns `false`. Calls the given block once for each
|
|
101
|
+
# result, which is passed as the argument to the block.
|
|
102
|
+
#
|
|
103
|
+
# An enumerator is returned if no block is given.
|
|
104
|
+
#
|
|
105
|
+
# This method will make repeated API calls until all remaining results
|
|
106
|
+
# are retrieved (unlike `#each`, for example, which merely iterates
|
|
107
|
+
# over the results returned by a single API call). Use with caution.
|
|
108
|
+
#
|
|
109
|
+
# @yield [cluster] The block for accessing each cluster.
|
|
110
|
+
# @yieldparam [Cluster] cluster The cluster object.
|
|
111
|
+
#
|
|
112
|
+
# @return [Enumerator,nil] An enumerator is returned if no block is given, otherwise `nil`.
|
|
113
|
+
#
|
|
114
|
+
# @example Iterating each cluster by passing a block:
|
|
115
|
+
# require "google/cloud/bigtable"
|
|
116
|
+
#
|
|
117
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
118
|
+
#
|
|
119
|
+
# bigtable.clusters.all do |cluster|
|
|
120
|
+
# puts cluster.cluster_id
|
|
121
|
+
# end
|
|
122
|
+
#
|
|
123
|
+
# @example Using the enumerator by not passing a block:
|
|
124
|
+
# require "google/cloud/bigtable"
|
|
125
|
+
#
|
|
126
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
127
|
+
#
|
|
128
|
+
# all_cluster_ids = bigtable.clusters.all.map do |cluster|
|
|
129
|
+
# puts cluster.cluster_id
|
|
130
|
+
# end
|
|
131
|
+
#
|
|
132
|
+
def all
|
|
133
|
+
return enum_for :all unless block_given?
|
|
134
|
+
|
|
135
|
+
results = self
|
|
136
|
+
loop do
|
|
137
|
+
results.each { |r| yield r }
|
|
138
|
+
break unless results.next?
|
|
139
|
+
results = results.next
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# @private
|
|
144
|
+
#
|
|
145
|
+
# New Cluster::List from a Google::Bigtable::Admin::V2::ListClustersResponse object.
|
|
146
|
+
def self.from_grpc grpc, service, instance_id: nil
|
|
147
|
+
clusters = List.new(Array(grpc.clusters).map do |cluster|
|
|
148
|
+
Cluster.from_grpc cluster, service
|
|
149
|
+
end)
|
|
150
|
+
token = grpc.next_page_token
|
|
151
|
+
token = nil if token == ""
|
|
152
|
+
clusters.token = token
|
|
153
|
+
clusters.instance_id = instance_id
|
|
154
|
+
clusters.service = service
|
|
155
|
+
clusters.failed_locations = grpc.failed_locations.map(&:to_s)
|
|
156
|
+
clusters
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
protected
|
|
160
|
+
|
|
161
|
+
# @private
|
|
162
|
+
#
|
|
163
|
+
# Raise an error unless an active service is available.
|
|
164
|
+
def ensure_service!
|
|
165
|
+
raise "Must have active connection" unless service
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2018 Google LLC
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
require "google/cloud/bigtable/gc_rule"
|
|
19
|
+
|
|
20
|
+
module Google
|
|
21
|
+
module Cloud
|
|
22
|
+
module Bigtable
|
|
23
|
+
##
|
|
24
|
+
# # ColumnFamily
|
|
25
|
+
#
|
|
26
|
+
# A set of columns within a table that share a common configuration.
|
|
27
|
+
#
|
|
28
|
+
# @example
|
|
29
|
+
# require "google/cloud/bigtable"
|
|
30
|
+
#
|
|
31
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
32
|
+
#
|
|
33
|
+
# instance = bigtable.instance("my-instance")
|
|
34
|
+
# table = instance.table("my-table")
|
|
35
|
+
#
|
|
36
|
+
# column_family = table.column_families["cf2"]
|
|
37
|
+
# puts column_family.gc_rule
|
|
38
|
+
#
|
|
39
|
+
class ColumnFamily
|
|
40
|
+
##
|
|
41
|
+
# Name of the column family.
|
|
42
|
+
# @return [String]
|
|
43
|
+
attr_reader :name
|
|
44
|
+
|
|
45
|
+
##
|
|
46
|
+
# The garbage collection rule to be used for the column family.
|
|
47
|
+
# Optional. The service default value will be used when not specified.
|
|
48
|
+
# @return [Google::Cloud::Bigtable::GcRule, nil]
|
|
49
|
+
attr_accessor :gc_rule
|
|
50
|
+
|
|
51
|
+
# @private
|
|
52
|
+
def initialize name, gc_rule: nil
|
|
53
|
+
@name = name
|
|
54
|
+
@gc_rule = gc_rule
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# @private
|
|
58
|
+
#
|
|
59
|
+
# Create a new ColumnFamily instance from a {Google::Bigtable::Admin::V2::ColumnFamily}.
|
|
60
|
+
#
|
|
61
|
+
# @param grpc [Google::Bigtable::Admin::V2::ColumnFamily]
|
|
62
|
+
# @param name [String] Column family name
|
|
63
|
+
# @return [Google::Cloud::Bigtable::ColumnFamily]
|
|
64
|
+
#
|
|
65
|
+
def self.from_grpc grpc, name
|
|
66
|
+
new(name).tap do |cf|
|
|
67
|
+
cf.gc_rule = GcRule.from_grpc grpc.gc_rule if grpc.gc_rule
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2019 Google LLC
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
require "google/cloud/bigtable/column_family"
|
|
19
|
+
|
|
20
|
+
module Google
|
|
21
|
+
module Cloud
|
|
22
|
+
module Bigtable
|
|
23
|
+
##
|
|
24
|
+
# Represents a table's column families.
|
|
25
|
+
#
|
|
26
|
+
# See {Project#create_table}, {Instance#create_table} and
|
|
27
|
+
# {Table#column_families}.
|
|
28
|
+
#
|
|
29
|
+
# @example
|
|
30
|
+
# require "google/cloud/bigtable"
|
|
31
|
+
#
|
|
32
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
33
|
+
#
|
|
34
|
+
# column_families = Google::Cloud::Bigtable::ColumnFamilyMap.new
|
|
35
|
+
#
|
|
36
|
+
# column_families.add "cf1", gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600)
|
|
37
|
+
# column_families.add "cf2", gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5)
|
|
38
|
+
#
|
|
39
|
+
# @example Create a table with a block yielding a ColumnFamilyMap.
|
|
40
|
+
# require "google/cloud/bigtable"
|
|
41
|
+
#
|
|
42
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
43
|
+
#
|
|
44
|
+
# table = bigtable.create_table("my-instance", "my-table") do |cfm|
|
|
45
|
+
# cfm.add('cf1', gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5))
|
|
46
|
+
# cfm.add('cf2', gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600))
|
|
47
|
+
#
|
|
48
|
+
# gc_rule = Google::Cloud::Bigtable::GcRule.union(
|
|
49
|
+
# Google::Cloud::Bigtable::GcRule.max_age(1800),
|
|
50
|
+
# Google::Cloud::Bigtable::GcRule.max_versions(3)
|
|
51
|
+
# )
|
|
52
|
+
# cfm.add('cf3', gc_rule: gc_rule)
|
|
53
|
+
# end
|
|
54
|
+
#
|
|
55
|
+
# puts table.column_families
|
|
56
|
+
#
|
|
57
|
+
# @example Update column families with a block yielding a ColumnFamilyMap.
|
|
58
|
+
# require "google/cloud/bigtable"
|
|
59
|
+
#
|
|
60
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
61
|
+
#
|
|
62
|
+
# table = bigtable.table("my-instance", "my-table", perform_lookup: true)
|
|
63
|
+
#
|
|
64
|
+
# table.column_families do |cfm|
|
|
65
|
+
# cfm.add "cf4", gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600)
|
|
66
|
+
# cfm.add "cf5", gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5)
|
|
67
|
+
#
|
|
68
|
+
# rule_1 = Google::Cloud::Bigtable::GcRule.max_versions(3)
|
|
69
|
+
# rule_2 = Google::Cloud::Bigtable::GcRule.max_age(600)
|
|
70
|
+
# rule_union = Google::Cloud::Bigtable::GcRule.union(rule_1, rule_2)
|
|
71
|
+
# cfm.update "cf2", gc_rule: rule_union
|
|
72
|
+
#
|
|
73
|
+
# cfm.delete "cf3"
|
|
74
|
+
# end
|
|
75
|
+
#
|
|
76
|
+
# puts table.column_families["cf3"] #=> nil
|
|
77
|
+
#
|
|
78
|
+
class ColumnFamilyMap
|
|
79
|
+
include Enumerable
|
|
80
|
+
|
|
81
|
+
##
|
|
82
|
+
# Creates a new ColumnFamilyMap object.
|
|
83
|
+
#
|
|
84
|
+
# @example
|
|
85
|
+
# require "google/cloud/bigtable"
|
|
86
|
+
#
|
|
87
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
88
|
+
#
|
|
89
|
+
# column_families = Google::Cloud::Bigtable::ColumnFamilyMap.new
|
|
90
|
+
#
|
|
91
|
+
# column_families.add "cf1", gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600)
|
|
92
|
+
# column_families.add "cf2", gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5)
|
|
93
|
+
#
|
|
94
|
+
# @example Create new column families using block syntax:
|
|
95
|
+
# require "google/cloud/bigtable"
|
|
96
|
+
#
|
|
97
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
98
|
+
#
|
|
99
|
+
# column_families = Google::Cloud::Bigtable::ColumnFamilyMap.new do |cfm|
|
|
100
|
+
# cfm.add "cf1", gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600)
|
|
101
|
+
# cfm.add "cf2", gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5)
|
|
102
|
+
# end
|
|
103
|
+
#
|
|
104
|
+
def initialize
|
|
105
|
+
@column_families = empty_map
|
|
106
|
+
|
|
107
|
+
yield self if block_given?
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
##
|
|
111
|
+
# Calls the block once for each column family in the map, passing
|
|
112
|
+
# the name and column family pair as parameters.
|
|
113
|
+
#
|
|
114
|
+
# If no block is given, an enumerator is returned instead.
|
|
115
|
+
#
|
|
116
|
+
# @yield [name, column_family] The name and column family pair.
|
|
117
|
+
# @yieldparam [String] name the column family name.
|
|
118
|
+
# @yieldparam [ColumnFamily] column_family the column family object.
|
|
119
|
+
#
|
|
120
|
+
# @return [Enumerator,nil] An enumerator is returned if no block is given, otherwise `nil`.
|
|
121
|
+
#
|
|
122
|
+
def each
|
|
123
|
+
return enum_for :each unless block_given?
|
|
124
|
+
|
|
125
|
+
@column_families.each do |name, column_family_grpc|
|
|
126
|
+
column_family = ColumnFamily.from_grpc column_family_grpc, name
|
|
127
|
+
yield name, column_family
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
##
|
|
132
|
+
# Retrieves the ColumnFamily object corresponding to the `name`. If not
|
|
133
|
+
# found, returns `nil`.
|
|
134
|
+
#
|
|
135
|
+
# @return [ColumnFamily]
|
|
136
|
+
#
|
|
137
|
+
def [] name
|
|
138
|
+
return nil unless name? name
|
|
139
|
+
|
|
140
|
+
ColumnFamily.from_grpc @column_families[name], name
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
##
|
|
144
|
+
# Returns true if the given name is present in the map.
|
|
145
|
+
#
|
|
146
|
+
# @return [Boolean]
|
|
147
|
+
#
|
|
148
|
+
def name? name
|
|
149
|
+
@column_families.has_key? name
|
|
150
|
+
end
|
|
151
|
+
alias key? name?
|
|
152
|
+
|
|
153
|
+
##
|
|
154
|
+
# Returns a new array populated with the names from the map.
|
|
155
|
+
#
|
|
156
|
+
# @return [Array<String>]
|
|
157
|
+
#
|
|
158
|
+
def names
|
|
159
|
+
@column_families.keys
|
|
160
|
+
end
|
|
161
|
+
alias keys names
|
|
162
|
+
|
|
163
|
+
##
|
|
164
|
+
# Returns the number of name and column family pairs in the map.
|
|
165
|
+
#
|
|
166
|
+
# @return [Integer]
|
|
167
|
+
#
|
|
168
|
+
def length
|
|
169
|
+
@column_families.length
|
|
170
|
+
end
|
|
171
|
+
alias size length
|
|
172
|
+
|
|
173
|
+
##
|
|
174
|
+
# Returns true if the map contains no name and column family pairs.
|
|
175
|
+
#
|
|
176
|
+
# @return [Boolean]
|
|
177
|
+
#
|
|
178
|
+
def empty?
|
|
179
|
+
length.zero?
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
##
|
|
183
|
+
# Adds a new column family to the table.
|
|
184
|
+
#
|
|
185
|
+
# @overload add(name, gc_rule: nil)
|
|
186
|
+
# @param name [String] Column family name.
|
|
187
|
+
# @param gc_rule [Google::Cloud::Bigtable::GcRule] The garbage
|
|
188
|
+
# collection rule to be used for the column family. Optional. The
|
|
189
|
+
# service default value will be used when not specified.
|
|
190
|
+
#
|
|
191
|
+
# @raise [ArgumentError] if the column family name already exists.
|
|
192
|
+
# @raise [FrozenError] if the column family map is frozen.
|
|
193
|
+
#
|
|
194
|
+
# @example
|
|
195
|
+
# require "google/cloud/bigtable"
|
|
196
|
+
#
|
|
197
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
198
|
+
#
|
|
199
|
+
# table = bigtable.table("my-instance", "my-table", perform_lookup: true)
|
|
200
|
+
#
|
|
201
|
+
# table.column_families do |column_families|
|
|
202
|
+
# column_families.add "cf4", gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600)
|
|
203
|
+
# column_families.add "cf5", gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5)
|
|
204
|
+
# end
|
|
205
|
+
#
|
|
206
|
+
def add name, positional_gc_rule = nil, gc_rule: nil
|
|
207
|
+
raise ArgumentError, "column family #{name.inspect} already exists" if @column_families.has_key? name
|
|
208
|
+
|
|
209
|
+
gc_rule ||= positional_gc_rule
|
|
210
|
+
if positional_gc_rule
|
|
211
|
+
warn "The positional gc_rule argument is deprecated. Use the named gc_rule argument instead."
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
column_family = Google::Bigtable::Admin::V2::ColumnFamily.new
|
|
215
|
+
column_family.gc_rule = gc_rule.to_grpc if gc_rule
|
|
216
|
+
@column_families[name] = column_family
|
|
217
|
+
|
|
218
|
+
nil
|
|
219
|
+
end
|
|
220
|
+
alias create add
|
|
221
|
+
|
|
222
|
+
##
|
|
223
|
+
# Updates an existing column family in the table.
|
|
224
|
+
#
|
|
225
|
+
# @param name [String] Column family name.
|
|
226
|
+
# @param gc_rule [Google::Cloud::Bigtable::GcRule] The new garbage
|
|
227
|
+
# collection rule to be used for the column family. Optional. The
|
|
228
|
+
# service default value will be used when not specified.
|
|
229
|
+
#
|
|
230
|
+
# @raise [ArgumentError] if the column family name does not exist.
|
|
231
|
+
# @raise [FrozenError] if the column family map is frozen.
|
|
232
|
+
#
|
|
233
|
+
# @example
|
|
234
|
+
# require "google/cloud/bigtable"
|
|
235
|
+
#
|
|
236
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
237
|
+
#
|
|
238
|
+
# table = bigtable.table("my-instance", "my-table", perform_lookup: true)
|
|
239
|
+
#
|
|
240
|
+
# table.column_families do |column_families|
|
|
241
|
+
# rule_1 = Google::Cloud::Bigtable::GcRule.max_versions(3)
|
|
242
|
+
# rule_2 = Google::Cloud::Bigtable::GcRule.max_age(600)
|
|
243
|
+
# rule_union = Google::Cloud::Bigtable::GcRule.union(rule_1, rule_2)
|
|
244
|
+
#
|
|
245
|
+
# column_families.update "cf2", gc_rule: rule_union
|
|
246
|
+
# end
|
|
247
|
+
#
|
|
248
|
+
def update name, gc_rule: nil
|
|
249
|
+
raise ArgumentError, "column family #{name.inspect} does not exist" unless @column_families.has_key? name
|
|
250
|
+
|
|
251
|
+
column_family = Google::Bigtable::Admin::V2::ColumnFamily.new
|
|
252
|
+
column_family.gc_rule = gc_rule.to_grpc if gc_rule
|
|
253
|
+
@column_families[name] = column_family
|
|
254
|
+
|
|
255
|
+
nil
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
##
|
|
259
|
+
# Deletes the named column family from the table.
|
|
260
|
+
#
|
|
261
|
+
# @param name [String] Column family name.
|
|
262
|
+
#
|
|
263
|
+
# @raise [ArgumentError] if the column family name does not exist.
|
|
264
|
+
# @raise [FrozenError] if the column family map is frozen.
|
|
265
|
+
#
|
|
266
|
+
# @example
|
|
267
|
+
# require "google/cloud/bigtable"
|
|
268
|
+
#
|
|
269
|
+
# bigtable = Google::Cloud::Bigtable.new
|
|
270
|
+
#
|
|
271
|
+
# table = bigtable.table("my-instance", "my-table", perform_lookup: true)
|
|
272
|
+
#
|
|
273
|
+
# table.column_families do |column_families|
|
|
274
|
+
# column_families.delete "cf3"
|
|
275
|
+
# end
|
|
276
|
+
#
|
|
277
|
+
def delete name
|
|
278
|
+
raise ArgumentError, "column family #{name.inspect} does not exist" unless @column_families.has_key? name
|
|
279
|
+
|
|
280
|
+
@column_families.delete name
|
|
281
|
+
|
|
282
|
+
nil
|
|
283
|
+
end
|
|
284
|
+
alias drop delete
|
|
285
|
+
|
|
286
|
+
##
|
|
287
|
+
# @private
|
|
288
|
+
# We don't need to document this method.
|
|
289
|
+
#
|
|
290
|
+
def freeze
|
|
291
|
+
@column_families.freeze
|
|
292
|
+
super
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
##
|
|
296
|
+
# @private
|
|
297
|
+
#
|
|
298
|
+
# Build column family modifications for the map.
|
|
299
|
+
#
|
|
300
|
+
# @param comparison_map [Google::Protobuf::Map] The map to compare the
|
|
301
|
+
# current map against for building the modification entries.
|
|
302
|
+
# @return [Array<Google::Bigtable::Admin::V2::ModifyColumnFamiliesRequest::Modification>]
|
|
303
|
+
#
|
|
304
|
+
def modifications comparison_map = nil
|
|
305
|
+
comparison_map ||= empty_map
|
|
306
|
+
|
|
307
|
+
created_modifications(comparison_map) +
|
|
308
|
+
updated_modifications(comparison_map) +
|
|
309
|
+
dropped_modifications(comparison_map)
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
##
|
|
313
|
+
# @private
|
|
314
|
+
#
|
|
315
|
+
# Return the Google::Protobuf::Map for the ColumnFamilyMap.
|
|
316
|
+
#
|
|
317
|
+
# @return [Google::Protobuf::Map]
|
|
318
|
+
#
|
|
319
|
+
def to_grpc
|
|
320
|
+
# Always return a dup in case it was frozen.
|
|
321
|
+
@column_families.dup
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
##
|
|
325
|
+
# @private
|
|
326
|
+
#
|
|
327
|
+
# Return the Hash for the ColumnFamilyMap.
|
|
328
|
+
#
|
|
329
|
+
# @return [Hash]
|
|
330
|
+
#
|
|
331
|
+
def to_grpc_hash
|
|
332
|
+
Hash[to_grpc.to_a]
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
##
|
|
336
|
+
# @private
|
|
337
|
+
#
|
|
338
|
+
# Create new ColumnFamilyMap from Google::Protobuf::Map.
|
|
339
|
+
#
|
|
340
|
+
# @param grpc_map [Google::Protobuf::Map]
|
|
341
|
+
# @return [ColumnFamilyMap]
|
|
342
|
+
#
|
|
343
|
+
def self.from_grpc grpc_map
|
|
344
|
+
new.tap do |cfm|
|
|
345
|
+
# Always dup so we don't modify the original map object.
|
|
346
|
+
cfm.instance_variable_set :@column_families, grpc_map.dup
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
protected
|
|
351
|
+
|
|
352
|
+
##
|
|
353
|
+
# Create an empty Google::Protobuf::Map suitable for column_families.
|
|
354
|
+
def empty_map
|
|
355
|
+
Google::Bigtable::Admin::V2::Table.new.column_families
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
##
|
|
359
|
+
# @private
|
|
360
|
+
#
|
|
361
|
+
# Build column family modifications for created column families.
|
|
362
|
+
#
|
|
363
|
+
# @param comparison_map [Google::Protobuf::Map] The map to compare the
|
|
364
|
+
# current map against for building the modification entries.
|
|
365
|
+
# @return [Array<Google::Bigtable::Admin::V2::ModifyColumnFamiliesRequest::Modification>]
|
|
366
|
+
#
|
|
367
|
+
def created_modifications comparison_map
|
|
368
|
+
added_keys = @column_families.keys - comparison_map.keys
|
|
369
|
+
|
|
370
|
+
added_keys.map do |name|
|
|
371
|
+
Google::Bigtable::Admin::V2::ModifyColumnFamiliesRequest:: \
|
|
372
|
+
Modification.new(
|
|
373
|
+
id: name,
|
|
374
|
+
create: @column_families[name]
|
|
375
|
+
)
|
|
376
|
+
end
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
##
|
|
380
|
+
# @private
|
|
381
|
+
#
|
|
382
|
+
# Build column family modifications for updated column families.
|
|
383
|
+
#
|
|
384
|
+
# @param comparison_map [Google::Protobuf::Map] The map to compare the
|
|
385
|
+
# current map against for building the modification entries.
|
|
386
|
+
# @return [Array<Google::Bigtable::Admin::V2::ModifyColumnFamiliesRequest::Modification>]
|
|
387
|
+
#
|
|
388
|
+
def updated_modifications comparison_map
|
|
389
|
+
possibly_updated_keys = @column_families.keys & comparison_map.keys
|
|
390
|
+
updated_keys = possibly_updated_keys.reject do |name|
|
|
391
|
+
@column_families[name] == comparison_map[name]
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
updated_keys.map do |name|
|
|
395
|
+
Google::Bigtable::Admin::V2::ModifyColumnFamiliesRequest:: \
|
|
396
|
+
Modification.new(
|
|
397
|
+
id: name,
|
|
398
|
+
update: @column_families[name]
|
|
399
|
+
)
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
##
|
|
404
|
+
# @private
|
|
405
|
+
#
|
|
406
|
+
# Build column family modifications for dropped column families.
|
|
407
|
+
#
|
|
408
|
+
# @param comparison_map [Google::Protobuf::Map] The map to compare the
|
|
409
|
+
# current map against for building the modification entries.
|
|
410
|
+
# @return [Array<Google::Bigtable::Admin::V2::ModifyColumnFamiliesRequest::Modification>]
|
|
411
|
+
#
|
|
412
|
+
def dropped_modifications comparison_map
|
|
413
|
+
dropped_keys = comparison_map.keys - @column_families.keys
|
|
414
|
+
|
|
415
|
+
dropped_keys.map do |name|
|
|
416
|
+
Google::Bigtable::Admin::V2::ModifyColumnFamiliesRequest:: \
|
|
417
|
+
Modification.new(
|
|
418
|
+
id: name,
|
|
419
|
+
drop: true
|
|
420
|
+
)
|
|
421
|
+
end
|
|
422
|
+
end
|
|
423
|
+
end
|
|
424
|
+
end
|
|
425
|
+
end
|
|
426
|
+
end
|