tables tablas ejemplo describe data create crear comandos nosql hbase

nosql - tablas - Escanee filas de HTable para valores de columna específicos usando el shell HBase



hbase show tables (6)

Como hubo varias solicitudes para explicar esta respuesta, esta respuesta adicional se ha publicado.

Ejemplo 1

Si

scan ''<table>'', { COLUMNS => ''<column>'', LIMIT => 3 }

volvería:

ROW COLUMN+CELL ROW1 column=<column>, timestamp=<timestamp>, value=hello_value ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2 ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3

entonces este filtro:

scan ''<table>'', { COLUMNS => ''<column>'', LIMIT => 3, FILTER => "ValueFilter( =, ''binaryprefix:hello_value2'') AND ValueFilter( =, ''binaryprefix:hello_value3'')" }

volvería:

ROW COLUMN+CELL ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2 ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3

Ejemplo 2

Si no es compatible también:

scan ''<table>'', { COLUMNS => ''<column>'', LIMIT => 3, FILTER => "ValueFilter( !=, ''binaryprefix:hello_value2'' )" }

volvería:

ROW COLUMN+CELL ROW1 column=<column>, timestamp=<timestamp>, value=hello_value ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3

Quiero escanear filas en un HTable desde el shell hbase donde una familia de columnas (es decir, Tweet) tiene un valor particular (es decir, user_id).

Ahora quiero encontrar todas las filas donde tweet: user_id tiene valor test1 ya que esta columna tiene el valor ''test1''

column=tweet:user_id, timestamp=1339581201187, value=test1

Aunque puedo escanear la tabla para un uso particular,

scan ''tweetsTable'',{COLUMNS => ''tweet:user_id''}

pero no encontré ninguna forma de escanear una fila por un valor.

¿Es posible hacer esto a través de HBase Shell?

Revisé esta pregunta también.


Desde el shell HBAse, creo que no es posible porque es de alguna manera como la consulta desde la que usamos desea buscar datos específicos. Como todos sabemos, HBAse no es SQL así que cuando queremos aplicar la consulta o si tenemos un caso como el tuyo, creo que deberías usar Hive o PIG donde, como Hive, es un buen enfoque, porque en el CERDO tenemos que meternos con los guiones.
De todos modos, puede obtener una buena garantía sobre la colmena desde aquí la integración de HIVE con HBase y desde Here
Si su único propósito es ver datos que no se obtienen desde el código (de cualquier cliente), entonces puede usar HBase Explorer o un producto nuevo y muy bueno, pero está en su versión beta y es "Administrador de HBase". Puedes obtener esto de HBase Manager
Es simple y, lo que es más importante, ayuda a insertar y eliminar datos, aplicando filtros en los calificadores de columnas de la interfaz de usuario al igual que otros clientes DB. Pruebalo.
Espero que sea útil para ti :)


Es posible sin Hive:

scan ''filemetadata'', { COLUMNS => ''colFam:colQualifier'', LIMIT => 10, FILTER => "ValueFilter( =, ''binaryprefix:<someValue.e.g. test1 AsDefinedInQuestion>'' )" }

Nota: para encontrar todas las filas que contienen test1 como valor especificado en la pregunta, use binaryprefix: test1 en el filtro (consulte esta respuesta para ver más ejemplos)


Nishu, aquí está la solución que uso periódicamente. En realidad es mucho más poderoso de lo que necesita en este momento, pero creo que usará su poder algún día. Sí, es para el shell HBase.

import org.apache.hadoop.hbase.filter.CompareFilter import org.apache.hadoop.hbase.filter.SingleColumnValueFilter import org.apache.hadoop.hbase.filter.SubstringComparator import org.apache.hadoop.hbase.util.Bytes scan ''yourTable'', {LIMIT => 10, FILTER => SingleColumnValueFilter.new(Bytes.toBytes(''family''), Bytes.toBytes(''field''), CompareFilter::CompareOp.valueOf(''EQUAL''), Bytes.toBytes(''AAA'')), COLUMNS => ''family:field'' }

Solo family:field columna de family:field se devuelve con filtro aplicado. Este filtro podría mejorarse para realizar comparaciones más complicadas.

Aquí también hay sugerencias para ti que considero más útiles:


Para escanear una tabla en hbase en función de cualquier valor de columna, SingleColumnValueFilter se puede usar como:

scan ''tablename'' , { FILTER => "SingleColumnValueFilter(''column_family'',''col_name'',>, ''binary:1'')" }


Un ejemplo de búsqueda de texto para un valor BIGBLUE en la tabla t1 con familia de columnas de d: a_content. Un escaneo de la tabla mostrará todos los valores disponibles:

scan ''t1'' ... column=d:a_content, timestamp=1404399246216, value=BIGBLUE ...

Para buscar solo un valor de BIGBLUE con límite de 1, intente con el siguiente comando: -

scan ''t1'',{ COLUMNS => ''d:a_content'', LIMIT => 1, FILTER => "ValueFilter( =, ''regexstring:BIGBLUE'' )" } COLUMN+CELL column=d:a_content, timestamp=1404399246216, value=BIGBLUE

Obviamente, eliminar el límite mostrará todas las ocurrencias en esa tabla / cf.