2012-04-04 13 views
5

En nuestra sabiduría infinita, decidimos nuestras filas estarían codificados con una pestaña en el medio:¿Cómo especifico una clave de fila en el shell hbase que tiene una pestaña?

item_id <tab> location 

Por ejemplo:

000001 http://www.url.com/page 

Usando hbase Shell, no podemos realizar un comando get porque el el carácter de tabulación no se escribe correctamente en la línea de entrada. Probamos

get 'tableName', '000001\thttp://www.url.com/page' 

sin éxito. ¿Qué debemos hacer?

Respuesta

10

Tuve el mismo problema con los valores binarios: \ x00. Este fue mi separador

Para el shell para aceptar los valores binarios, es necesario proporcionarles en comillas dobles (") Familia en lugar de comilla simple (') MiTabla 'MyKey ',

puesto.''': calificador', "\ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x06Hello de shell"

comprobar cómo se está codificando la pestaña, mi mejor apuesta sería que se UTF8 codificada por lo que desde el Tabla ASCII, esto sería "000001 \ x09http: //www.url.com/page".

En una nota lateral, usted shou Si usa el carácter nulo para su separador, lo ayudará a escanear.

+0

Esto parece funcionar, sobre todo porque se aborda la cuestión general de escapar caracteres en la cáscara HBase. Lo que terminamos haciendo, en cambio, fue conectar nuestras teclas y usar eso, que no solo proporciona claves muy aburridas (todos los caracteres hexadecimales) sino que también las extiende a través de nuestra mesa para golpear todas las regiones muy bien. – whiterook6

0

Espero que pueda cambiar el carácter de tabulación. :) Sí, es una mala idea, ya que los trabajos de Map Reduce usan la pestaña como delimitador, y generalmente es una mala idea usar una pestaña o espacio como delimitador.

Puede usar dos puntos dobles (: :) como delimitador. Pero espera, ¿y si la URL tiene un doble punto en la URL? Bueno, urlencode la URL cuando la almacene en HBase; de ​​este modo, tendrá un delimitador estándar y la parte de la URL de la clave no entrará en conflicto con el delimitador.

En Python:

import urllib 

DELIMITER = "::" 
urlkey = urllib.quote_plus(location) 

rowkey = item_id + DELIMITER + urlkey 
+0

Mi equipo utiliza la pestaña como un delimitador todo el tiempo en HBase, ya que los datos que conocemos no pueden tener pestañas. No hay problemas con Map Reduce o cualquier otra cosa. – Tony

Cuestiones relacionadas