2017-08-06 16 views
1

,我有以下簡單的表格,我從以下源創建的:https://hortonworks.com/hadoop-tutorial/introduction-apache-hbase-concepts-apache-phoenix-new-backup-restore-utility-hbase/#start-hbase如何從HBase的與標準進行簡單的選擇(Where子句)

使用下列內容:

create 'driver_dangerous_event','events' 
put 'driver_dangerous_event','4','events:driverId','78' 
put 'driver_dangerous_event','4','events:driverName','Carl' 
put 'driver_dangerous_event','4','events:eventTime','2016-09-23 03:25:03.567' 
put 'driver_dangerous_event','4','events:eventType','Normal' 
put 'driver_dangerous_event','4','events:latitudeColumn','37.484938' 
put 'driver_dangerous_event','4','events:longitudeColumn','-119.966284' 
put 'driver_dangerous_event','4','events:routeId','845' 
put 'driver_dangerous_event','4','events:routeName','Santa Clara to San Diego' 
put 'driver_dangerous_event','4','events:truckId','637' 

我需要要查詢這一行,但使用where過濾器(以備將來使用),我有一個休息api或在我的服務器上運行的節儉api。

我試過使用其餘的api,但沒有做到這一點,這可能嗎?

我也嘗試使用這個的NuGet:https://hbasenet.codeplex.com/releases/view/133288,但我不明白如何篩選與where子句中,我只能選擇一個特定的行中的數據:

Hbase.Client c = new Hbase.Client(serverHostName, port, 10000); 
var res = c.Scan<Driver>("driver_dangerous_event", "events", "1"); 

是否有任何選項做REST api/Thrift API /一些其他C#庫的簡單過濾查詢?

回答

0

我用Microsoft.HBase.Client爲預成型的簡單查詢(https://github.com/hdinsight/hbase-sdk-for-net

// Connection 
RequestOptions scanOptions = RequestOptions.GetDefaultOptions(); 
scanOptions.Port = int.Parse(hbaseDataConnection.Port); 
scanOptions.AlternativeEndpoint = "/"; 
var nodeIPs = new List<string>(); 
nodeIPs.Add(hbaseDataConnection.Address); 
HBaseClient client = new HBaseClient(null, scanOptions, new LoadBalancerRoundRobin(nodeIPs)); 
Scanner scanner = new Scanner { batch = 10 }; 
ScannerInformation scannerInfo = await client.CreateScannerAsync(_tableName, scanner, scanOptions); 
var options = RequestOptions.GetDefaultOptions(); 
options.Port = int.Parse(hbaseDataConnection.Port); 
options.AlternativeEndpoint = "/"; 
options.AlternativeHost = scannerInfo.Location.Host; 

var f1 = new SingleColumnValueFilter(
Encoding.UTF8.GetBytes(ColumnFamilyName), 
Encoding.UTF8.GetBytes("driverName"), 
CompareFilter.CompareOp.Equal, 
new SubstringComparator(fld.Values[0].ToString())) 

var filter = new FilterList(FilterList.Operator.MustPassAll, f1); 
scanner.filter = filter.ToEncodedString(); 

ScannerInformation scanInfo = client.CreateScannerAsync(_tableName, scanner, scanOptions).Result; 
result = RetrieveResults(client, scanInfo, scanOptions).ToList(); 

確保REST API是HBase的機器,例如,在運行

hbase rest start -p 20050 --infoport 20051