partição da coluna na colmeia

tenho de dividir a tabela em hive com uma coluna que também faz parte da tabela.

para eg:

quadro: empregado

colunas: empregado, empregado, empregado, empregado

{[[6]} tenho de repartir a tabela usando o sistema de distribuição de emprego. Então eu escrevo a seguinte pergunta:

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

acabei de usar o nome "ds" aqui porque ele não me permitiu colocar o mesmo nome {[[4]}.

É isto que estou a fazer? Também enquanto inserindo valores na tabela, eu tenho que usar um arquivo separado por vírgulas. Agora o ficheiro consiste numa linha como: 2019, John, 2000

como uma fila. Se eu tiver que dividir usando o salário minha primeira partição seria todas as pessoas para salário 2000. Então a pergunta seria

LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (ds=2000);
Mais uma vez, após 100 entradas com salário igual a 2000, tenho 500 entradas com salário igual a 4000. Então, eu voltaria a disparar a pergunta:

LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (ds=4000);
POR FAVOR, AVISA-ME SE TIVER RAZÃO...

 4
Author: analyticalpicasso, 2011-03-15

3 answers

Aqui está como criar uma tabela de colmeias com uma partição na coluna que indicou

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

A coluna de partição é especificada na secção PARTITIONED BY.
Na concha da colmeia você pode executar describe employee; e ele irá mostrar todas as colunas na tabela. Com o seu CREATE TABLE deve ver 4 colunas, não as 3 que está a tentar obter.

Para o seu comando de carga, irá querer especificar todas as partições onde escrever. (Eu não estou muito familiarizado com estes, principalmente baseando-se em http://wiki.apache.org/hadoop/Hive/LanguageManual/DML#Syntax

Então, algo como ...
LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE employee PARTITION (employeeSalary=2000, employeeSalary=4000);
 4
Author: QuinnG, 2011-03-15 21:10:04
Aqui está como a tabela de partições na colmeia funciona: 1) os dados/valor da coluna de partição não são armazenados no arquivo de dados real no armazém, em vez disso, ele é armazenado na colméia meta loja.

2) por isso não deve ter os dados da coluna de partição nos ficheiros de dados na pasta de armazenamento da colmeia.

Para o teu problema, estes devem ser os passos .

1)

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

Isto irá criar uma entrada na colmeia metastizada que criou uma tabela com 2 colunas. employeeId INT, employeeName STRING and it is having one partition column employeeSalary INT.

2) crie uma tabela temp permite dizer emp_temp.

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

Presumo que os seus ficheiros de entrada estejam em formato de texto.

3) Copie todos os seus ficheiros no local do armazém da tabela emp_temp ou execute a seguinte consulta( estou a contar que tem todos os seus ficheiros de dados no ./exemplo / pasta de ficheiros.)

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

4) Execute agora o seguinte hql ( isto irá criar partições dinamicamente para tu)

 INSERT OVERWRITE TABLE employee partition(employeeSalary) 
   SELECT employeeId , employeeName , employeeSalary 
   from emp_temp
Obrigado., aditya
 1
Author: Aditya Agarwal, 2018-02-12 13:17:57

Talvez, eu acho que, em primeiro lugar, você deve carregar todos os dados em uma tabela, em seguida, usar a extensão da colmeia (múltiplas inserções):

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] ...;

Então, se quiseres, podes

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
 0
Author: user1099024, 2012-10-06 14:56:11