tutorial tablas español ejemplo data create crear almacenamiento hbase database-scan

tablas - HBase(fácil): Cómo realizar un escaneo de prefijo de rango en el shell hbase



hbase tutorial español (4)

Así que resulta muy fácil. Los rangos de exploración no son inclusivos, la lógica es start <= key <end. Así que la respuesta es

scan ''mytable'', {STARTROW => ''abc'', ENDROW => ''abd''}

Estoy diseñando una aplicación para ejecutarse en hbase y quiero explorar de forma interactiva los contenidos de mi clúster. Estoy en el shell hbase y quiero realizar un escaneo de todas las claves comenzando con los caracteres "abc". Dichas claves pueden incluir "abc4", "abc92", "abc20014", etc. Intenté una exploración.

hbase(main):003:0> scan ''mytable'', {STARTROW => ''abc'', ENDROW => ''abc''}

Pero esto no parece devolver nada ya que técnicamente no hay ninguna clave de fila "abc", solo las claves de fila que comienzan con "abc"

Lo que quiero es algo como

hbase(main):003:0> scan ''mytable'', {STARTSROWPREFIX => ''abc'', ENDROWPREFIX => ''abc''}

Escuché que HBase puede hacer esto rápidamente y es uno de sus principales puntos de venta. ¿Cómo hago esto en el shell hbase?



En las versiones recientes de HBase, ahora puede hacerlo en el shell hbase:

scan ''mytable'', {ROWPREFIXFILTER => ''abc''}

Esto efectivamente hace esto (y también funciona para situaciones binarias)

scan ''mytable'', {STARTROW => ''abc'', ENDROW => ''abd''}

Este método es MUCHO más eficiente que el enfoque de "PrefixFilter" porque este último coloca todos los registros a través del código de comparación que está presente en esta clase de PrefixFilter.


La solución aceptada no funcionará en todos los casos (claves binarias). Además, el uso de un PrefixFilter puede ser lento porque realiza una exploración de la tabla hasta que alcanza el prefijo. Una solución más eficaz es utilizar un STARTROW y un FILTRO como:

scan ''my_table'', {STARTROW => ''abc'', FILTER => "PrefixFilter(''abc'')"}