1. 程式人生 > >HBase中正則過濾表示式與JAVA正則表示式不一致問題的分析和解決

HBase中正則過濾表示式與JAVA正則表示式不一致問題的分析和解決

HBase提供了豐富的查詢過濾功能。

比如說它提供了RegexStringComparator這樣的函式,可以實現按照正則表示式進行過濾。它可以有效地彌補向前綴查詢這樣的機制,從而可以使hbase也支援了類似於like查詢之類的功能。

然而在實踐過程中,很多人都會遇到一個問題,對於裡面的正則表示式沒有過於詳細的介紹,一直以為是直接從JAVA等一些標準的正則表示式演化過來。直接拿過來用就可以。

但是,這只是美好的猜測而已。

如stackoverflow上的這篇問題一樣。http://stackoverflow.com/questions/13997794/java-regular-expression-for-hbase-scan-filter-not-working。

如現在想對一串數字字元進行查詢,如201609282222633_1333222222_22222,

如果直接照用JAVA的正則表示式如“^20160928+\\d{6}_133\\d{4,}_\\d{0,}$",這樣在JAVA中肯定可以快速編譯通過,然而在hbase查詢中卻通不過。

經過一番認真檢視,才發現HBASE中的正則表示式略微有些區別。

最重要還是其原始碼中自帶的一個小例子。如

* ValueFilter vf = new ValueFilter(CompareOp.EQUAL,
* new RegexStringComparator(
* // v4 IP address
* "(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3,3}" +
* "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(\\/[0-9]+)?" +
* "|" +
* // v6 IP address
* "((([\\dA-Fa-f]{1,4}:){7}[\\dA-Fa-f]{1,4})(:([\\d]{1,3}.)" +
* "{3}[\\d]{1,3})?)(\\/[0-9]+)?"));
* </pre>
*/

這個類的原始碼中對於IP地址的查詢中,發現其\\d這樣的字元的設定加了一個方括號,加上,果然順利通過。

相關推薦

HBase過濾表示式JAVA表示式一致問題的分析解決

HBase提供了豐富的查詢過濾功能。 比如說它提供了RegexStringComparator這樣的函式,可以實現按照正則表示式進行過濾。它可以有效地彌補向前綴查詢這樣的機制,從而可以使hbase也

快取資料庫雙寫,一致問題及解決方案

面試題 如何保證快取與資料庫的雙寫一致性? 面試官心理分析 你只要用快取,就可能會涉及到快取與資料庫雙儲存雙寫,你只要是

Linux_Shell_Shell 表示式 常用表示式

在Linux Shell 程式設計中,我們常需要用到 正則表示式 進行 檔案的匹配在本篇文章中,我們對Linux shell 中的正則表示式 做一個總結,方便之後的shell 編寫。參考文章:shell程式設計之正則表示式shell script 在if 的判斷條件正則表示式

java 表示式java表示式匹配圖片個數

Java 正則表示式和 Perl 的是最為相似的。 java.util.regex 包主要包括以下三個類: 1、Pattern 類: pattern 物件是一個正則表示式的編譯表示。Pattern 類沒

ES6的Map集合(java裏類似)

遍歷 也有 實現 數組 _id getname 私有 而且 click   Set類型可以用來處理列表中的值,但是不適用於處理鍵值對這樣的信息結構。ES6也添加了Map集合來解決類似的問題 一、Map集合   JS的對象(Object),本質上是鍵值對的集合(Hash結構)

C#的名稱空間namespaceJava的包package之間的區別

Java 包被用來組織檔案或公共型別以避免型別衝突。包結構可以對映到檔案系統。 System.Security.Cryptography.AsymmetricAlgorithm aa; 可能被替換: import System.Security.Crypography; class xxx { .

c++virtual關鍵字的作用Java多型的一點對比

轉載至:https://segmentfault.com/a/1190000006119157 動機 最近一直在使用C++寫win32程式,用了一些庫,裡面提供的類和demo各種是virtual這個關鍵字,一直不是很明白到底是啥用,於是查看了一些文件,寫小程式來實驗

JavaWeb開發Ajax技術、jsonjava實現List、Map資料直接傳遞的研究

 一、在JavaWeb開發中基於jquery框架來使用ajax技術,Json與後臺servlet進行資料互動示例,下面示例中基於servlet技術,沒有使用struts2等框架。         由於專案需要通過ajax得到後臺的List物件、map物件裡面的值,閒暇時間

純前端表格控制元件SpreadJSJava結合,實現模板上傳下載等功能

安裝部署: 開發環境: 後臺伺服器端採用 Java 、SpringMVC。 資料儲存到 \demo_web\WEB-INF\FileDatabase.txt 檔案中,不需要依賴DB。 採用 Eclipse Java EE IDE for Web Develope

0014-Hive的Timestamp型別日期Impala顯示一致分析

溫馨提示:要看高清無碼套圖,請使用手機開啟並單擊圖片放大檢視。 1.問題描述 Hive表中儲存的Timestamp型別的欄位顯示日期與Impala中查詢出來的日期不一致。 2.問題復現 1.建立一個簡單的測試表 2.向表中插入一條測試資料 insert into date_tes

androidjava web互動完成簡單的登入註冊

   本文的知識點包括android客戶端的網路程式設計、訊息機制、IO流、多執行緒和java web伺服器端的servlet、資料庫操作、javabean技術、工具類和測試類的使用。 客戶端 執行效果圖 佈局檔案 activity_main.xml <

Android RSAJava RSA加密不同標準產生問題的解決方法

最近做一個基於android的客戶端,客戶端與Java伺服器(MyEclipse自帶的Tomcat伺服器)的通訊需要實施安全方案。而本人是使用非對稱金鑰來對資料進行加密的,客戶端用公鑰加密,伺服器用私鑰解密。因此本人就用非對稱金鑰RSA演算法來實施。而本人在最開始的時候,在

java多執行緒:執行緒同步synchronized(同步的問題、佇列鎖),死鎖的產生解決

# 0、不同步的問題 併發的執行緒不安全問題: 多個執行緒同時操作同一個物件,如果控制不好,就會產生問題,叫做執行緒不安全。 我們來看三個比較經典的案例來說明**執行緒不安全的問題**。 ## 0.1 訂票問題 例如前面說過的黃牛訂票問題,可能出現負數或相同。 [執行緒建立方式&&黃牛訂票

Android使用Handler造成內存泄露的分析解決

imageview 出現 end std 虛擬 包括 author weakref 由於 Java使用有向圖機制,通過GC自動檢查內存中的對象(什麽時候檢查由虛擬機決定),如果GC發現一個或一組對象為不可到達狀態,則將該對象從內存中回收。也就是說,一個對象不被任何引用所指向

Mybatis關聯查詢,查詢出的記錄數量數據庫直接查詢一致,如何解決

mobile 語句 細心 problem 解決方法 指向 map blog money <select id="findUserInfoListForMap" resultMap="BaseResultMap"> SELECT p.name, u.

SQL SERVERLIKE使用變量類型不同輸出結果一致解惑

如果 wrapper ng- http sql eat 的人 -c grid 一同事在寫腳本時,遇到一個關於LIKE裏面使用不同的變量類型導致查詢結果不一致的問題,因為這個問題被不同的人問過好幾次,索性總結一下,免得每次都要解釋一遍,直接丟一篇博客豈不是更方便!其實看似有點

django之cookie值頁面顯示瀏覽器儲存的值一致問題

個人遇到的關於django的cookie問題: counter = int(request.COOKIES['count']) + 1 # del request.COOKIES['count'] # 刪除伺服器COOKIES if counter > 3: counter =

用cmd執行記事本寫的java檔案,以及jdk版本執行版本一致原因及其解決辦法

1.首先新建一個記事本,檔名改為Welcome.java拓展名也要改!(屬性裡面改為顯示拓展名,這樣才可以通過重新命名的方式改檔案個格式) public class Welcome{ public static void main(String[] args){ System.out.pr

Android使用Handler造成記憶體洩露的分析解決

Java使用有向圖機制,通過GC自動檢查記憶體中的物件(什麼時候檢查由虛擬機器決定),如果GC發現一個或一組物件為不可到達狀態,則將該物件從記憶體中回收。也就是說,一個物件不被任何引用所指向,則該物件會在被GC發現的時候被回收;另外,如果一組物件中只包含互相的引用,而沒有來自它們外部的引用(例如有兩個物件A和

微信小程式開發js的md5加密中文php的加密中文一致

解決方法,js先把中文轉為utf8,再md5加密, md5.js function safe_add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF) var msw = (x >> 16) +