sishen-hbase-ruby 0.2.8 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +2 -0
- data/Rakefile +1 -1
- data/hbase-ruby.gemspec +1 -1
- data/lib/hbase/client.rb +5 -1
- data/lib/hbase/operation/table_operation.rb +43 -3
- data/lib/hbase/request/table_request.rb +16 -1
- metadata +1 -1
data/README.txt
CHANGED
@@ -16,6 +16,8 @@ require 'hbase'
|
|
16
16
|
client = HBase::Client.new("http://localhost:60010/api") # this url is the default.
|
17
17
|
tables = client.list_tables # list available tables
|
18
18
|
|
19
|
+
table = client.create_table('users', 'habbit') # create a table whose column_family is habbit
|
20
|
+
|
19
21
|
table = client.show_table('users') # show the meta info of table users
|
20
22
|
|
21
23
|
row = client.show_row('users', 'sishen') # show the data of row 'sishen' in table 'users'
|
data/Rakefile
CHANGED
data/hbase-ruby.gemspec
CHANGED
data/lib/hbase/client.rb
CHANGED
@@ -20,7 +20,7 @@ module HBase
|
|
20
20
|
end
|
21
21
|
|
22
22
|
unless @url.path =~ /^\/api/
|
23
|
-
@url += (@url[-1] == '/' ? "api" : "/api")
|
23
|
+
@url.path += (@url.path[-1] == '/' ? "api" : "/api")
|
24
24
|
end
|
25
25
|
|
26
26
|
# Not actually opening the connection yet, just setting up the persistent connection.
|
@@ -40,6 +40,10 @@ module HBase
|
|
40
40
|
safe_request { @connection.delete(@url.path + path) }
|
41
41
|
end
|
42
42
|
|
43
|
+
def put(path, data = nil)
|
44
|
+
safe_request { @connection.put(@url.path + path, data, {'Content-Type' => 'text/xml'}) }
|
45
|
+
end
|
46
|
+
|
43
47
|
private
|
44
48
|
def safe_request(&block)
|
45
49
|
begin
|
@@ -36,17 +36,34 @@ module HBase
|
|
36
36
|
Response::TableResponse.new(post(request.create, xml_data))
|
37
37
|
rescue Net::ProtocolError => e
|
38
38
|
if e.to_s.include?("TableExistsException")
|
39
|
-
raise TableExistsError, "Table '#{name} already exists"
|
39
|
+
raise TableExistsError, "Table '#{name}' already exists"
|
40
40
|
else
|
41
41
|
raise TableFailCreateError, e.message
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
def
|
46
|
+
def alter_table(name, *args)
|
47
|
+
raise StandardError, "Table name must be of type String" unless name.instance_of? String
|
48
|
+
|
49
|
+
request = Request::TableRequest.new(name)
|
50
|
+
|
51
|
+
begin
|
52
|
+
xml_data = construct_xml_stream(name, *args)
|
53
|
+
Response::TableResponse.new(put(request.update, xml_data))
|
54
|
+
rescue Net::ProtocolError => e
|
55
|
+
if e.to_s.include?("TableNotFoundException")
|
56
|
+
raise TableNotFoundError, "Table '#{name}' not exists"
|
57
|
+
else
|
58
|
+
raise TableFailCreateError, e.message
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def delete_table(name, columns = nil)
|
47
64
|
begin
|
48
65
|
request = Request::TableRequest.new(name)
|
49
|
-
Response::TableResponse.new(delete(request.delete))
|
66
|
+
Response::TableResponse.new(delete(request.delete(columns)))
|
50
67
|
rescue Net::ProtocolError => e
|
51
68
|
if e.to_s.include?("TableNotFoundException")
|
52
69
|
raise TableNotFoundError, "Table '#{name}' not exists"
|
@@ -84,6 +101,29 @@ module HBase
|
|
84
101
|
|
85
102
|
def table_regions(name, start_row = nil, end_row = nil)
|
86
103
|
end
|
104
|
+
|
105
|
+
private
|
106
|
+
def construct_xml_stream(name, *args)
|
107
|
+
xml_data = "<?xml version='1.0' encoding='UTF-8'?><table><name>#{name}</name><columnfamilies>"
|
108
|
+
for arg in args
|
109
|
+
if arg.instance_of? String
|
110
|
+
xml_data << "<columnfamily><name>#{arg}</name></columnfamily>"
|
111
|
+
elsif arg.instance_of? Hash
|
112
|
+
xml_data << "<columnfamily>"
|
113
|
+
arg.each do |k,v|
|
114
|
+
if Model::ColumnDescriptor::AVAILABLE_OPTS.include? k
|
115
|
+
xml_data << "<#{Model::ColumnDescriptor::AVAILABLE_OPTS[k]}>#{v}</#{Model::ColumnDescriptor::AVAILABLE_OPTS[k]}>"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
xml_data << "</columnfamily>"
|
119
|
+
else
|
120
|
+
raise StandardError, "#{arg.class.to_s} of #{arg.to_s} is not of Hash Type"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
xml_data << "</columnfamilies></table>"
|
124
|
+
|
125
|
+
xml_data
|
126
|
+
end
|
87
127
|
end
|
88
128
|
end
|
89
129
|
end
|
@@ -21,6 +21,10 @@ module HBase
|
|
21
21
|
@path << "/"
|
22
22
|
end
|
23
23
|
|
24
|
+
def update
|
25
|
+
@path << "/#{name}"
|
26
|
+
end
|
27
|
+
|
24
28
|
def enable
|
25
29
|
@path << "/#{name}/enable"
|
26
30
|
end
|
@@ -29,8 +33,19 @@ module HBase
|
|
29
33
|
@path << "/#{name}/disable"
|
30
34
|
end
|
31
35
|
|
32
|
-
def delete
|
36
|
+
def delete(columns = nil)
|
33
37
|
@path << "/#{name}"
|
38
|
+
if columns
|
39
|
+
if columns.is_a? String
|
40
|
+
columns = [columns]
|
41
|
+
elsif columns.is_a? Array
|
42
|
+
else
|
43
|
+
raise StandardError, "Only String or Array type allows for columns"
|
44
|
+
end
|
45
|
+
params = columns.collect { |column| "column=#{column}" }.join('%')
|
46
|
+
@path << "?#{params}"
|
47
|
+
end
|
48
|
+
@path
|
34
49
|
end
|
35
50
|
end
|
36
51
|
end
|