Class: HBase::Table
- Inherits:
-
Object
- Object
- HBase::Table
- Includes:
- Enumerable, Admin, Scoped::Aggregation::Admin, Util
- Defined in:
- lib/hbase-jruby/table.rb,
lib/hbase-jruby/table/admin.rb,
lib/hbase-jruby/table/mutation.rb,
lib/hbase-jruby/table/inspection.rb,
lib/hbase-jruby/table/batch_action.rb,
lib/hbase-jruby/table/checked_operation.rb
Overview
@return [org.apache.hadoop.conf.Configuration]
Defined Under Namespace
Classes: BatchAction, CheckedOperation, Mutation
Constant Summary
Constants included from Util
Util::JAVA_BYTE_ARRAY_CLASS, Util::JAVA_BYTE_ARRAY_EMPTY
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
-
#add_coprocessor(class_name, props = {}) ⇒ Object
Adds the table coprocessor to the table (asynchronous).
-
#add_coprocessor!(class_name, props = {}) {|progress, total| ... } ⇒ Object
Adds the table coprocessor to the table.
-
#add_family(name, opts) ⇒ Object
Adds the column family (asynchronous).
-
#add_family!(name, opts) {|progress, total| ... } ⇒ nil
Adds the column family (synchronous).
-
#alter(props) ⇒ Object
Alters the table (asynchronous).
-
#alter!(props) {|progress, total| ... } ⇒ nil
Alters the table (synchronous).
-
#alter_family(name, opts) ⇒ Object
Alters the column family (asynchronous).
-
#alter_family!(name, opts) {|progress, total| ... } ⇒ nil
Alters the column family.
-
#append(rowkey, spec) ⇒ Hash
Appends values to one or more columns within a single row.
-
#batch(arg = nil) {|HBase::Table::BatchAction| ... } ⇒ Array<Hash>
Method that does a batch call on Deletes, Gets, Puts, Increments, Appends and RowMutations.
-
#check(rowkey, cond) ⇒ HBase::Table::CheckedOperation
Returns CheckedOperation instance for check-and-put and check-and-delete.
- #close ⇒ nil deprecated Deprecated.
-
#closed? ⇒ Boolean
Returns whether if the connection is closed.
-
#create!(desc, props = {}) ⇒ Object
Creates the table.
-
#delete(*args) ⇒ Object
Deletes data.
-
#delete_family(name) ⇒ Object
Removes the column family (asynchronous).
-
#delete_family!(name) {|progress, total| ... } ⇒ nil
Removes the column family.
-
#delete_row(*rowkeys) ⇒ nil
Delete rows.
-
#descriptor ⇒ org.apache.hadoop.hbase.client.UnmodifyableHTableDescriptor
Returns a read-only org.apache.hadoop.hbase.HTableDescriptor object.
-
#disable! ⇒ nil
Disables the table.
-
#disabled? ⇒ true, false
Checks if the table is disabled.
-
#drop! ⇒ nil
Drops the table.
-
#each {|row| ... } ⇒ Enumerator
Scan through the table.
-
#enable! ⇒ nil
Enables the table.
-
#enabled? ⇒ true, false
Checks if the table is enabled.
-
#exists? ⇒ true, false
Checks if the table of the name exists.
-
#families ⇒ Hash
Returns properties of column families indexed by family name.
-
#has_coprocessor?(class_name) ⇒ true, false
Return if the table has the coprocessor of the given class name.
-
#htable ⇒ org.apache.hadoop.hbase.client.PooledHTable
(INTERNAL) Returns the underlying org.apache.hadoop.hbase.client.HTable object (local to current thread).
-
#increment(rowkey, *args) ⇒ Object
Atomically increase numeric values.
-
#inspect ⇒ String
Returns a printable version of the table description.
- #lookup_and_parse(col, expect_cq) ⇒ Object
- #lookup_schema(col) ⇒ Object
-
#mutate(rowkey) {|HBase::Table::Mutation::Mutator| ... } ⇒ nil
Performs multiple mutations atomically on a single row.
-
#properties ⇒ Hash
Returns table properties.
-
#put(*args) ⇒ Object
Performs PUT operations.
-
#raw_families ⇒ Hash
Returns raw String-to-String map of column family properties indexed by name.
-
#raw_properties ⇒ Hash
Returns raw String-to-String map of table properties.
-
#regions ⇒ Hash
Returns region information.
-
#remove_coprocessor(class_name) ⇒ Object
Removes the coprocessor from the table (asynchronous).
-
#remove_coprocessor!(class_name) {|progress, total| ... } ⇒ nil
Removes the coprocessor from the table.
-
#scoped ⇒ HBase::Scoped
Returns HBase::Scoped object for this table.
-
#snapshot!(snapshot_name) ⇒ nil
Creates a snapshot of the table.
-
#snapshots ⇒ Array<Hash>
Returns an Array of snapshot information for this table.
-
#split!(*split_keys) ⇒ nil
Splits the table region on the given split point (asynchronous).
-
#truncate! ⇒ nil
Truncates the table by dropping it and recreating it.
- #with_java_get(&block) ⇒ Object
- #with_java_scan(&block) ⇒ Object
Methods included from Util
append_0, from_bytes, java_bytes?, parse_column_name, to_bytes, to_typed_bytes
Methods included from Scoped::Aggregation::Admin
#disable_aggregation, #disable_aggregation!, #enable_aggregation, #enable_aggregation!
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
11 12 13 |
# File 'lib/hbase-jruby/table.rb', line 11 def config @config end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
10 11 12 |
# File 'lib/hbase-jruby/table.rb', line 10 def name @name end |
Instance Method Details
#add_coprocessor(class_name, props = {}) ⇒ Object
Adds the table coprocessor to the table (asynchronous)
173 174 175 |
# File 'lib/hbase-jruby/table/admin.rb', line 173 def add_coprocessor class_name, props = {} _add_coprocessor class_name, props, false end |
#add_coprocessor!(class_name, props = {}) {|progress, total| ... } ⇒ Object
Adds the table coprocessor to the table
168 169 170 |
# File 'lib/hbase-jruby/table/admin.rb', line 168 def add_coprocessor! class_name, props = {}, &block _add_coprocessor class_name, props, true, &block end |
#add_family(name, opts) ⇒ Object
Adds the column family (asynchronous)
122 123 124 |
# File 'lib/hbase-jruby/table/admin.rb', line 122 def add_family name, opts _add_family name, opts, false end |
#add_family!(name, opts) {|progress, total| ... } ⇒ nil
Adds the column family (synchronous)
116 117 118 |
# File 'lib/hbase-jruby/table/admin.rb', line 116 def add_family! name, opts, &block _add_family name, opts, true, &block end |
#alter(props) ⇒ Object
Alters the table (asynchronous)
105 106 107 |
# File 'lib/hbase-jruby/table/admin.rb', line 105 def alter props _alter props, false end |
#alter!(props) {|progress, total| ... } ⇒ nil
Alters the table (synchronous)
99 100 101 |
# File 'lib/hbase-jruby/table/admin.rb', line 99 def alter! props, &block _alter props, true, &block end |
#alter_family(name, opts) ⇒ Object
Alters the column family (asynchronous)
139 140 141 |
# File 'lib/hbase-jruby/table/admin.rb', line 139 def alter_family name, opts _alter_family name, opts, false end |
#alter_family!(name, opts) {|progress, total| ... } ⇒ nil
Alters the column family
133 134 135 |
# File 'lib/hbase-jruby/table/admin.rb', line 133 def alter_family! name, opts, &block _alter_family name, opts, true, &block end |
#append(rowkey, spec) ⇒ Hash
Appends values to one or more columns within a single row.
196 197 198 199 |
# File 'lib/hbase-jruby/table.rb', line 196 def append rowkey, spec result = htable.append @mutation.append(rowkey, spec) Row.send(:new, self, result).to_h if result # (maybe null) end |
#batch(arg = nil) {|HBase::Table::BatchAction| ... } ⇒ Array<Hash>
Method that does a batch call on Deletes, Gets, Puts, Increments, Appends and RowMutations. The ordering of execution of the actions is not defined. An Array of Hashes are returned as the results of each operation. For Delete, Put, and RowMutation, :result entry of the returned Hash is Boolean. For Increment and Append, it will be plain Hashes, and for Get, HBase::Rows will be returned. When an error has occurred, you can still access the partial results using ‘results` method of the thrown BatchException instance.
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 |
# File 'lib/hbase-jruby/table.rb', line 258 def batch arg = nil if arg # Backward compatibility return scoped.batch(arg) else raise ArgumentError, "Block not given" unless block_given? end b = BatchAction.send(:new, self, @mutation) yield b results = Array.new(b.actions.length).to_java process = lambda do results.each_with_index do |r, idx| action = b.actions[idx] type = action[:type] case type when :get action[:result] = (r.nil? || r.empty?) ? nil : Row.send(:new, self, r) when :append action[:result] = r && Row.send(:new, self, r).to_h when :increment action[:result] = r && Row.send(:new, self, r).to_h.tap { |h| h.each do |k, v| h[k] = Util.from_bytes :fixnum, v unless v.is_a?(Fixnum) end } else case r when java.lang.Exception action[:result] = false action[:exception] = r when nil action[:result] = false else action[:result] = true end end end b.actions end begin htable.batch b.actions.map { |a| a[:action] }, results process.call rescue Exception => e raise HBase::BatchException.new(e, process.call) end end |
#check(rowkey, cond) ⇒ HBase::Table::CheckedOperation
Returns CheckedOperation instance for check-and-put and check-and-delete
235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/hbase-jruby/table.rb', line 235 def check rowkey, cond raise ArgumentError, 'invalid check condition' unless cond.length == 1 col, val = cond.first cf, cq, type = lookup_and_parse(col, true) # If the passed value is null, the check is for the lack of column CheckedOperation.new self, @mutation, Util.to_bytes(rowkey), cf, cq, (val.nil? ? nil : Util.to_typed_bytes(type, val)) end |
#close ⇒ nil
34 35 36 |
# File 'lib/hbase-jruby/table.rb', line 34 def close nil end |
#closed? ⇒ Boolean
Returns whether if the connection is closed
40 41 42 |
# File 'lib/hbase-jruby/table.rb', line 40 def closed? @hbase.closed? end |
#create!(column_family_name, props = {}) ⇒ nil #create!(column_family_hash, props = {}) ⇒ nil #create!(table_descriptor) ⇒ nil
Creates the table
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/hbase-jruby/table/admin.rb', line 54 def create! desc, props = {} splits = if props[:splits] raise ArgumentError, ":splits property must be an Array" if !props[:splits].is_a?(Array) props[:splits].map { |e| Util.to_bytes(e).to_a }.to_java(Java::byte[]) end todo = nil with_admin do |admin| raise RuntimeError, 'Table already exists' if admin.tableExists(@name) case desc when HTableDescriptor patch_table_descriptor! desc, props admin.createTable(*[desc, splits].compact) when Symbol, String todo = lambda { create!({desc => {}}, props) } when Hash htd = HTableDescriptor.new(@name.to_java_bytes) patch_table_descriptor! htd, props desc.each do |name, opts| htd.addFamily hcd(name, opts) end admin.createTable(*[htd, splits].compact) else raise ArgumentError, 'Invalid table description' end end todo.call if todo # Avoids mutex relocking end |
#delete(rowkey) ⇒ nil #delete(rowkey, *extra) ⇒ nil #delete(*delete_specs) ⇒ nil
Deletes data
125 126 127 128 129 130 131 132 133 134 |
# File 'lib/hbase-jruby/table.rb', line 125 def delete *args specs = args.first.is_a?(Array) ? args : [args] list = specs.map { |spec| spec.empty? ? nil : @mutation.delete(*spec) }.compact if list.length == 1 htable.delete list.first else htable.delete list end end |
#delete_family(name) ⇒ Object
Removes the column family (asynchronous)
155 156 157 |
# File 'lib/hbase-jruby/table/admin.rb', line 155 def delete_family name _delete_family name, false end |
#delete_family!(name) {|progress, total| ... } ⇒ nil
Removes the column family
149 150 151 |
# File 'lib/hbase-jruby/table/admin.rb', line 149 def delete_family! name, &block _delete_family name, true, &block end |
#delete_row(*rowkeys) ⇒ nil
Delete rows.
139 140 141 142 143 144 145 146 |
# File 'lib/hbase-jruby/table.rb', line 139 def delete_row *rowkeys list = rowkeys.map { |rk| Delete.new(Util.to_bytes rk) } if list.length == 1 htable.delete list.first else htable.delete list end end |
#descriptor ⇒ org.apache.hadoop.hbase.client.UnmodifyableHTableDescriptor
Returns a read-only org.apache.hadoop.hbase.HTableDescriptor object
5 6 7 |
# File 'lib/hbase-jruby/table/inspection.rb', line 5 def descriptor htable.get_table_descriptor end |
#disable! ⇒ nil
Disables the table
217 218 219 220 221 |
# File 'lib/hbase-jruby/table/admin.rb', line 217 def disable! with_admin do |admin| admin.disableTable @name if admin.isTableEnabled(@name) end end |
#disabled? ⇒ true, false
Checks if the table is disabled
17 18 19 |
# File 'lib/hbase-jruby/table/admin.rb', line 17 def disabled? !enabled? end |
#drop! ⇒ nil
Drops the table
233 234 235 236 237 238 239 240 241 |
# File 'lib/hbase-jruby/table/admin.rb', line 233 def drop! with_admin do |admin| raise RuntimeError, 'Table does not exist' unless admin.tableExists @name admin.disableTable @name if admin.isTableEnabled(@name) admin.deleteTable @name close end end |
#each {|row| ... } ⇒ Enumerator
Scan through the table
221 222 223 |
# File 'lib/hbase-jruby/table.rb', line 221 def each &block scoped.each(&block) end |
#enable! ⇒ nil
Enables the table
209 210 211 212 213 |
# File 'lib/hbase-jruby/table/admin.rb', line 209 def enable! with_admin do |admin| admin.enableTable @name unless admin.isTableEnabled(@name) end end |
#enabled? ⇒ true, false
Checks if the table is enabled
11 12 13 |
# File 'lib/hbase-jruby/table/admin.rb', line 11 def enabled? with_admin { |admin| admin.isTableEnabled(@name) } end |
#exists? ⇒ true, false
Checks if the table of the name exists
5 6 7 |
# File 'lib/hbase-jruby/table/admin.rb', line 5 def exists? with_admin { |admin| admin.tableExists @name } end |
#families ⇒ Hash
Returns properties of column families indexed by family name
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/hbase-jruby/table/inspection.rb', line 31 def families {}.tap { |ret| descriptor.families.each do |family| name = family.name_as_string ret[name] = {}.tap { |props| COLUMN_PROPERTIES.each do |prop, gs| get = gs[:get] if get && family.respond_to?(get) props[prop] = parse_property family.send get end end } end } end |
#has_coprocessor?(class_name) ⇒ true, false
Return if the table has the coprocessor of the given class name
196 197 198 |
# File 'lib/hbase-jruby/table/admin.rb', line 196 def has_coprocessor? class_name descriptor.hasCoprocessor(class_name) end |
#htable ⇒ org.apache.hadoop.hbase.client.PooledHTable
(INTERNAL) Returns the underlying org.apache.hadoop.hbase.client.HTable object (local to current thread)
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/hbase-jruby/table.rb', line 20 def htable check_closed # [:hbase_jruby][HBase connection][Table name] local_vars = Thread.current[:hbase_jruby] ||= {} unless local_htables = local_vars[@hbase] @hbase.send :register_thread, Thread.current local_htables = local_vars[@hbase] = {} end local_htables[@name] ||= @hbase.send :get_htable, @name end |
#increment(rowkey, column, by) ⇒ Hash #increment(rowkey, column_by_hash) ⇒ Hash #increment(inc_spec) ⇒ Hash
Atomically increase numeric values
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/hbase-jruby/table.rb', line 171 def increment rowkey, *args if args.empty? && rowkey.is_a?(Hash) INSENSITIVE_ROW_HASH.clone.tap { |result| rowkey.each do |key, spec| result[Util.java_bytes?(key) ? ByteArray[key] : key] = increment(key, spec) end } else incr = @mutation.increment(rowkey, *args) Row.send(:new, self, htable.increment(incr)).to_h.tap { |h| h.each do |k, v| h[k] = Util.from_bytes :fixnum, v unless v.is_a?(Fixnum) end } end end |
#inspect ⇒ String
Returns a printable version of the table description
69 70 71 72 73 74 75 76 |
# File 'lib/hbase-jruby/table/inspection.rb', line 69 def inspect if exists? descriptor.toStringCustomizedValues else # FIXME "{NAME => '#{@name}'}" end end |
#lookup_and_parse(col, expect_cq) ⇒ Object
313 314 315 |
# File 'lib/hbase-jruby/table.rb', line 313 def lookup_and_parse col, expect_cq @hbase.schema.lookup_and_parse @name_sym, col, expect_cq end |
#lookup_schema(col) ⇒ Object
308 309 310 |
# File 'lib/hbase-jruby/table.rb', line 308 def lookup_schema col @hbase.schema.lookup @name_sym, col end |
#mutate(rowkey) {|HBase::Table::Mutation::Mutator| ... } ⇒ nil
Performs multiple mutations atomically on a single row. Currently Put and Delete are supported. The mutations are performed in the order in which they were specified.
213 214 215 |
# File 'lib/hbase-jruby/table.rb', line 213 def mutate(rowkey, &block) htable.mutateRow @mutation.mutate(rowkey, &block) end |
#properties ⇒ Hash
Returns table properties
11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/hbase-jruby/table/inspection.rb', line 11 def properties desc = descriptor {}.tap { |props| TABLE_PROPERTIES.each do |prop, gs| get = gs[:get] if get && desc.respond_to?(get) props[prop] = parse_property desc.send get end end } end |
#put(rowkey, data) ⇒ Fixnum #put(data) ⇒ Fixnum
Performs PUT operations
72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/hbase-jruby/table.rb', line 72 def put *args case args.length when 1 puts = args.first.map { |rowkey, props| @mutation.put rowkey, props } htable.put puts puts.length when 2 htable.put @mutation.put(*args) 1 else raise ArgumentError, 'invalid number of arguments' end end |
#raw_families ⇒ Hash
Returns raw String-to-String map of column family properties indexed by name
50 51 52 53 54 55 56 57 |
# File 'lib/hbase-jruby/table/inspection.rb', line 50 def raw_families {}.tap { |ret| descriptor.families.each do |family| name = family.name_as_string ret[name] = parse_raw_map family.values end } end |
#raw_properties ⇒ Hash
Returns raw String-to-String map of table properties
25 26 27 |
# File 'lib/hbase-jruby/table/inspection.rb', line 25 def raw_properties parse_raw_map descriptor.values end |
#regions ⇒ Hash
Returns region information
61 62 63 64 65 |
# File 'lib/hbase-jruby/table/inspection.rb', line 61 def regions with_admin do |admin| _regions admin end end |
#remove_coprocessor(class_name) ⇒ Object
Removes the coprocessor from the table (asynchronous)
189 190 191 |
# File 'lib/hbase-jruby/table/admin.rb', line 189 def remove_coprocessor class_name _remove_coprocessor class_name, false end |
#remove_coprocessor!(class_name) {|progress, total| ... } ⇒ nil
Removes the coprocessor from the table.
183 184 185 |
# File 'lib/hbase-jruby/table/admin.rb', line 183 def remove_coprocessor! class_name, &block _remove_coprocessor class_name, true, &block end |
#scoped ⇒ HBase::Scoped
Returns HBase::Scoped object for this table
227 228 229 |
# File 'lib/hbase-jruby/table.rb', line 227 def scoped Scoped.send(:new, self, @hbase.config.get('hbase.client.scanner.caching').to_i) end |
#snapshot!(snapshot_name) ⇒ nil
Creates a snapshot of the table
246 247 248 249 250 |
# File 'lib/hbase-jruby/table/admin.rb', line 246 def snapshot! snapshot_name with_admin do |admin| admin.snapshot snapshot_name, @name end end |
#snapshots ⇒ Array<Hash>
Returns an Array of snapshot information for this table
254 255 256 |
# File 'lib/hbase-jruby/table/admin.rb', line 254 def snapshots @hbase.snapshots.select { |h| h[:table] == @name } end |
#split!(*split_keys) ⇒ nil
Splits the table region on the given split point (asynchronous)
203 204 205 |
# File 'lib/hbase-jruby/table/admin.rb', line 203 def split! *split_keys _split split_keys, false end |
#truncate! ⇒ nil
Truncates the table by dropping it and recreating it.
225 226 227 228 229 |
# File 'lib/hbase-jruby/table/admin.rb', line 225 def truncate! htd = htable.get_table_descriptor drop! create! htd end |
#with_java_get(&block) ⇒ Object
58 59 60 |
# File 'lib/hbase-jruby/table.rb', line 58 def with_java_get &block self.scoped.with_java_get(&block) end |
#with_java_scan(&block) ⇒ Object
54 55 56 |
# File 'lib/hbase-jruby/table.rb', line 54 def with_java_scan &block self.scoped.with_java_scan(&block) end |