Tengo la partición de la tabla en hive con una columna, que es también parte de la tabla.

Por ejemplo:

Tabla: empleado

Columnas: employeeId, nombre_empleado, employeeSalary

Tengo que partición de la tabla usando employeeSalary.
Así que escribir la siguiente consulta:

 CREATE TABLE employee (employeeId INT, employeeName STRING, employeeSalary INT) PARTITIONED BY (ds INT); 

Acabo de utilizar el nombre «ds» aquí ya que me cansaría que me permita poner el mismo nombre employeeSalary.

Esto es correcto lo que estoy haciendo? También, mientras que la inserción de los valores en la tabla, tengo que usar un archivo separado por comas. Ahora el archivo consta de fila como:
2019,Juan,2000

como una fila.
Si tengo la partición utilizando el sueldo de mi primera partición sería a todas las personas para el salario de 2000. Por lo que la consulta sería

LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (ds=2000);

De nuevo después de 100 entradas con sueldo de 2000, tengo cerca de 500 entradas con sueldo de 4000.
Así que me sería de nuevo el fuego de la consulta:

LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (ds=4000);

POR FAVOR, HÁGAMELO SABER SI ESTOY EN LO CIERTO…

3 Comentarios

  1. 4

    Aquí se muestra cómo crear una colmena de la tabla con una partición en la columna especificada

    CREATE TABLE employee (employeeId INT, employeeName STRING) PARTITIONED BY (employeeSalary INT);
    

    La partición de la columna se especifica en el PARTITIONED BY sección.

    En la Colmena shell puede ejecutar describe employee; y se muestran todas las columnas en la tabla. Con su CREATE TABLE usted debe ver a 4 columnas, no los 3 que están tratando de conseguir.

    Para su comando de carga, se desea especificar todas las particiones para escribir en. (No estoy muy familiarizado con estos, en su mayoría colocando fuera de http://wiki.apache.org/hadoop/Hive/LanguageManual/DML#Syntax

    Algo así como

    LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (employeeSalary=2000, employeeSalary=4000);
    
    • Hola,Gracias por su respuesta. Así que vas a decir que en el archivo de carga hay 2 valores employeeId y employeeName?
    • También, para el employeeSalary, voy a tener que especificar los dos valores en distintas consultas como: LOAD DATA LOCAL INPATH ‘./examples/files/kv2.txt’ SOBRESCRIBIR EN la TABLA empleado de la PARTICIÓN (employeeSalary=2000); LOAD DATA LOCAL INPATH ‘./examples/files/kv2.txt’ SOBRESCRIBIR EN la TABLA empleado de la PARTICIÓN (employeeSalary=4000);
    • Habrá 3 columnas en la tabla y el archivo debe tener 3 entradas por fila. El employeeSalary es una columna. Yo creo que usted debe utilizar una sola consulta, mediante dos podrían producir los mismos resultados… no he trabajado con la carga de datos en múltiples particiones suficiente para saber.
  2. 2

    Aquí es cómo la tabla de la partición de la colmena obras:
    1) la partición de datos de la columna/valor no se almacena en el archivo de datos real en almacén sino que se guarda en la colmena meta de la tienda.

    2) así que no debería tener la partición de datos de la columna en los archivos de datos en la colmena directorio del almacén.

    para su problema de estos deben ser los pasos .

    1)

    CREATE TABLE employee (employeeId INT, employeeName STRING ) PARTITIONED BY (employeeSalary INT) stored as <your choice of format>;

    Esto creará una entrada en la colmena metastore que ha creado una tabla con 2 columnas employeeId INT, nombre_empleado CADENA y es tener una partición de la columna employeeSalary INT.

    2) crear una tabla temporal que permite decir emp_temp.

    CREATE TABLE emp_temp (employeeId INT, employeeName STRING,employeeSalary INT ) stored as text; 
    

    estoy suponiendo que los archivos de entrada en formato de texto.

    3) copiar todo lo que el archivo en la ubicación de almacén de emp_temp tabla O ejecute la siguiente consulta( estoy con la asunción de que todos los archivos de datos en el ./ejemplo/archivos de una carpeta).

    LOAD DATA LOCAL INPATH './examples/files/*.txt' OVERWRITE INTO TABLE emp_temp.

    4) ahora ejecute el siguiente hql ( esto va a crear particiones de forma dinámica para usted)

     INSERT OVERWRITE TABLE employee partition(employeeSalary) 
       SELECT employeeId , employeeName , employeeSalary 
       from emp_temp
    

    Gracias,
    aditya

  3. 0

    Tal vez, creo que, en primer lugar la carga de todos los datos en una tabla, a continuación, utilizar la Colmena extensión (múltiples inserciones):

    FROM from_statement
    INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT          EXISTS]] select_statement1
    [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] 
    [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;
    FROM from_statement
    INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1
    [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] 
    [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] ...;
    

    Luego, si quieres, puedes

    from big_data_table
    insert overwrite table table1 partiton (ds=2000)
    select * where employeeId>0 && employeeId<101>
    insert overwrite table table2 partition (ds=4000)
    select * where employeeId>=101&&employeeId<=600
    

Dejar respuesta

Please enter your comment!
Please enter your name here