2011-09-25 43 views
16

Estoy funcionando colmena 071, el procesamiento de los datos existentes que es tiene la siguiente estructura de directorios:
-tableName
- d = (por ejemplo, 2011-08-01)
- d = 2011-08-02
- d = 2011-08-03

... etc
en cada fecha tengo los archivos de fecha.
ahora para cargar los datos que estoy usandoHive: partición dinámica añadiendo a tabla externa

CREATE EXTERNAL TABLE table_name (i int) 
PARTITIONED BY (date String) 
LOCATION '${hiveconf:basepath}/TableName';** 

Me gustaría que mi script de colmena para poder cargar las particiones pertinentes de acuerdo con una fecha de entrada y el número de días. por lo que si paso fecha = '2011-08-03' y días = '7'
El guión debe cargar los siguientes particiones - d = 2011-08-03
- d = 2011-08 -04
- d = 2011-08-05
- d = 2011-08-06
- d = 2011-08-07
- d = 2011-08-08
- d = 2011-08 -09

No he encontrado ninguna manera de hacerlo. CEPT explicitlly en marcha:

ALTER TABLE table_name ADD PARTITION (d='2011-08-03'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-04'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-05'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-06'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-07'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-08'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-09'); 

y luego pasando la consulta

select count(1) from table_name; 

, pero esto se offcourse no automatizado de acuerdo a la fecha y el día de entrada

¿Hay alguna manera de definir a la externa tabla para cargar particiones de acuerdo con el rango de fechas, o la fecha de aritmética?

+0

¡Hola! ¿Pudiste resolver este problema? Si es así, ¿puedes compartir tu solución? ¡¡Gracias!! – eli

+0

Como estoy trabajando con Amazon EMR. parece que Amazon implementó el siguiente comando: "Alterar tabla X recuperar particiones" que agrega todos los subdirectorios como particiones. esto en parte resuelve el problema usando "donde d> start yd Tomer

+0

Gracias. Esperaba evitar tener que recuperar particiones, ya que lleva bastante tiempo. – eli

Respuesta

0

Las particiones son una segmentación física de los datos, donde el sistema de directorio mantiene la partición y las consultas usan los metadatos para determinar dónde se encuentra la partición. entonces, si puede hacer que la estructura del directorio coincida con la consulta, debería encontrar los datos que desea. por ejemplo:

select count(*) from table_name where (d >= '2011-08-03) and (d <= '2011-08-09'); 

pero no sé de ninguna operación de fecha alcance de lo contrario, tendrá que hacer los cálculos para crear el patrón de consulta en primer lugar.

también puede crear tablas externas y agregarles particiones que definan la ubicación. Esto le permite triturar los datos como desee, y aún usar el esquema de partición para optimizar las consultas.

-1

he explicado el escenario similar en mi blog:

1) Es necesario configurar propiedades:

SET hive.exec.dynamic.partition=true; 
SET hive.exec.dynamic.partition.mode=nonstrict; 

2) Crear una tabla de ensayo externo para cargar los archivos de datos de entrada para este mesa.

3) Cree una tabla externa de producción principal "production_order" con el campo de fecha como una de las columnas particionadas.

4) Cargue la tabla de producción de la tabla de etapas para que los datos se distribuyan en las particiones automáticamente.

Explicó el concepto similar en la siguiente publicación de blog. Si quieres ver el código

http://exploredatascience.blogspot.in/2014/06/dynamic-partitioning-with-hive.html

+0

Esta puede ser la peor implementación usando el almacenamiento por etapas para el caso de uso de producción. Ellos están ahí para un propósito. No te equivoques con infras –

0

No creo que haya ninguna funcionalidad integrada para esto en la colmena. Puede escribir un plugin. Creating custom UDFs

Probablemente no necesite mencionar esto, pero ¿ha considerado un script bash simple que tomaría sus parámetros y canalizaría los comandos a la colmena?

Oozie workflows sería otra opción, sin embargo, eso podría ser exagerado. Oozie Hive Extension - Después de pensarlo un poco, no creo que Oozie trabaje para esto.

6

Tengo un problema muy similar en el que, después de una migración, tengo que volver a crear una tabla para la que tengo los datos, pero no los metadatos. La solución parece ser, después de volver a crear la tabla:

MSCK REPAIR TABLE table_name;

Explained here

Esto también menciona la "alter table X recover partitions" que la OP comentó sobre su propio puesto. MSCK REPAIR TABLE table_name; funciona en implementaciones de EMR que no son de Amazon (Cloudera en mi caso).

+0

Gracias por la información. :) –

Cuestiones relacionadas