2011-10-07 42 views
14

tôi có các tình huống sau trong trường hợp HBase tôiHBase nhận được tất cả các giá trị ghi lại ngày tháng cho một tế bào

hbase(main):002:0> create 'test', 'cf' 
0 row(s) in 1.4690 seconds 

hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1' 
0 row(s) in 0.1480 seconds 

hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2' 
0 row(s) in 0.0070 seconds 

hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3' 
0 row(s) in 0.0120 seconds 

hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value4' 
0 row(s) in 0.0070 seconds 

Bây giờ nếu bạn sẽ thấy, hai chèn cuối cùng là dành cho các gia đình cùng một cột, cùng cột và cùng quan trọng. Nhưng nếu tôi hiểu đúng cơ sở cf: c + row3 đại diện cho một ô sẽ có tất cả các phiên bản được đặt thời gian của giá trị được chèn vào.

Nhưng đơn giản trở lại quét chỉ có giá trị gần đây

hbase(main):010:0> scan 'test'  
ROW     COLUMN+CELL            
row1     column=cf:a, timestamp=1317945279379, value=value1   
row2     column=cf:b, timestamp=1317945285731, value=value2   
row3     column=cf:c, timestamp=1317945301466, value=value4   
3 row(s) in 0.0250 seconds 

Làm thế nào để tôi nhận được tất cả các giá trị ghi lại ngày tháng cho một ô, hoặc làm thế nào để thực hiện phạm vi thời gian dựa truy vấn?

Trả lời

24

Để xem các phiên bản của cột bạn cần cung cấp số phiên bản.

scan 'test', {VERSIONS => 3} 

sẽ cung cấp cho bạn 2 phiên bản của cột nếu chúng khả dụng. bạn có thể sử dụng nó để có được tốt:

get 'test', 'row3', {COLUMN => 'cf:c', VERSIONS => 3} 

để nhận giá trị của thời gian bạn có thể sử dụng TIMESTAMP.

get 'test', 'row3', {COLUMN => 'cf:c', TIMESTAMP => 1317945301466} 

nếu bạn cần nhận giá trị "giữa" 2 dấu thời gian, bạn nên sử dụng TimestampsFilter.

+5

Không phải là trường hợp ở đây, nhưng bạn cũng nên đảm bảo Bảng hỗ trợ nhiều phiên bản, tức là đưa ra tham số phiên bản CF. – Tony

+4

thực sự, bạn đúng @Tony. tạo bảng với: "tạo" kiểm tra ", {NAME => 'cf', VERSIONS => N}" (mặc định là 3) sẽ là một phương pháp hay. Và các phiên bản áp dụng cho các gia đình cột không phải bảng, bạn nên cung cấp phiên bản cho mỗi họ cột đơn trong bảng. – frail

+0

Tôi tự hỏi nếu có cách nào để nói 'quét' để truy xuất tất cả các phiên bản hiện có, thay vì đặt ngưỡng –

1

Chìa khóa hàng 'row3' của cf: c cho VALUE4 phải là duy nhất nếu không nó bị ghi đè:

hbase(main):052:0> scan 'mytable' , {COLUMN => 'cf1:1', VERSION => 3} 
ROW       COLUMN+CELL                 
1234      column=cf1:1, timestamp=1405796300388, value=hello        
1 row(s) in 0.0160 seconds 

hbase(main):053:0> put 'mytable', 1234, 'cf1:1', 'wow!' 
0 row(s) in 0.1020 seconds 

Cột 1 của cf1 có giá trị của 'hello' được ghi đè bởi đặt thứ hai với cùng một hàng khóa 1234 và giá trị của 'wow!'

hbase(main):054:0> scan 'mytable', {COLUMN => 'cf1:1', VERSION => 3} 
ROW     COLUMN+CELL            
1234     column=cf1:1, timestamp=1405831703617, value=wow!   
2 row(s) in 0.0310 seconds 

Bây giờ, lần chèn thứ hai chứa giá trị mới 'hey' cho cột 1 của cf1 và truy vấn quét cho 3 phiên bản gần đây nhất hiển thị 'wow!' và 'hey', xin vui lòng không các phiên bản được hiển thị trên thứ tự giảm dần.

hbase(main):055:0> put 'mytable', 123, 'cf1:1', 'hey' 

hbase(main):004:0> scan 'mytable', {COLUMN => 'cf1:1', VERSION => 3} 
ROW     COLUMN+CELL            
123     column=cf1:1, timestamp=1405831295769, value=hey   
1234     column=cf1:1, timestamp=1405831703617, value=wow!   
1

Để thay đổi số phiên bản được cho phép trong một gia đình cột sử dụng lệnh sau:

alter 'test', NAME=>'cf', VERSIONS=>2 

sau đó thêm một entry:

put 'test', 'row1', 'cf:a2', 'value1e' 

sau đó xem các phiên bản khác nhau:

get 'test', 'row1', {COLUMN => 'cf:a2', VERSIONS => 2} 

sẽ trở lại một cái gì đó như:

COLUMN      CELL                     
cf:a2      timestamp=1457947804214, value=value1e            
cf:a2      timestamp=1457947217039, value=value1d            
2 row(s) in 0.0090 seconds 

Dưới đây là một liên kết để biết thêm chi tiết: https://learnhbase.wordpress.com/2013/03/02/hbase-shell-commands/.

Các vấn đề liên quan