2012-03-08 39 views
6

He estado jugando con Hive durante algunos días, pero todavía tengo problemas con la partición.¿Cómo puedo particionar una tabla con HIVE?

He estado grabando registros de Apache (formato Combine) en Hadoop durante algunos meses. Se almacenan en formato de texto fila, se repartió por fecha (a través de canal): /logs/aaaa/mm/dd/hh/*

Ejemplo:

/logs/2012/02/10/00/Part01xx (02/10/2012 12:00 am) 
/logs/2012/02/10/00/Part02xx 
/logs/2012/02/10/13/Part0xxx (02/10/2012 01:00 pm) 

La fecha en el archivo combined log está siguiendo este formato [10/feb/2012: 00: 00: 00 -0800]

¿Cómo puedo crear una tabla externa con una partición en Hive que use mi partición física? No puedo encontrar ninguna buena documentación en la partición de Hive. He encontrado pregunta relacionada, como:

Si se me carga mis registros en una tabla externa con la colmena, no puedo particionar con el tiempo, ya que no es el buen formato (Feb < => 02). Incluso si tuviera un buen formato, ¿cómo puedo transformar una cadena "10/02/2012: 00: 00: 00 -0800" en el directorio múltiple "/ 2012/02/10/00"?

Eventualmente podría utilizar la secuencia de comandos de cerdo para convertir mis registros sin procesar en tablas de colmena, pero en este punto solo debería utilizar el cerdo en lugar de la colmena para hacer mis informes.

Respuesta

5

Si entiendo correctamente, tiene archivos en las carpetas a 4 niveles de profundidad de los registros de directorio. En ese caso, defina su tabla como externa con la ruta 'logs' y particione por 4 campos virtuales: año, mes, día_de_meses, hora_de_día.

El reparto lo realiza esencialmente Flume.

EDIT 3/9: Muchos detalles dependen de cómo exactamente Flume escribe los archivos. Sin embargo, en términos generales, el DDL debe ser algo como esto:

CREATE TABLE table_name(fields...) 
PARTITIONED BY(log_year STRING, log_month STRING, 
    log_day_of_month STRING, log_hour_of_day STRING) 
format description 
STORED AS TEXTFILE 
LOCATION '/your user path/logs'; 

EDITAR 3/15: Por la petición zzarbi, estoy añadiendo una nota que una vez creada la tabla, la colmena necesita ser informado sobre particiones creadas. Esto debe hacerse repetidamente siempre que Flume u otro proceso cree nuevas particiones. Ver mi respuesta a la pregunta Create external with Partition.

+0

¿Cómo sería la creación de la tabla? y me gustaría hacer una consulta para usar esas particiones? – zzarbi

+0

Ver mis ediciones en la respuesta. – Olaf

+0

Tendré que probar que me pondré en contacto con usted tan pronto como pueda – zzarbi

Cuestiones relacionadas