Uno, deduplicar datos de la tabla de colmena
1. Copie la estructura de la tabla
CREATE TABLE <new_table> LIKE <old_table>;
2. Inserte los datos después de la deduplicación
insert overwrite table <new_table>(
select t.id, t.local_path
from (
select
id, local_path, row_number() over(distribute by id sort by local_path) as rn
from <old_table>
) t where t.rn=1
);
La estructura es la siguiente
insert overwrite table <new_table> (
select <字段>
from (
select <字段>, row_number() over(distribute by <有重复的字段> sort by <重复字段的排列根据字段>) as rn
from <old_table>
) t where t.rn=1
);
También puede insertar directamente en la tabla original sin crear una nueva tabla y actualizar directamente
3. Desduplicación de la tabla de particiones
#hive数据去重
#获取表头
fieldsTmp=$(hive -e "SET hive.cli.print.header=true;select * from ${dbname}.${table_name} limit 0;" | sed -e "s/\t/,/g;s/data\.//g" | grep -v "WARN")
fields2=${fieldsTmp//,${table_name}.dt/}
fields=${fields2//${table_name}./}
hive -e "
use $dbname;
insert overwrite table $table_name partition(dt=$date_slice) select $fields from (select $fields,row_number() over(distribute by $tab_primarykey sort by $key_code desc)as rn from $table_name)t where t.rn=1"
Las variables que deben asignarse en el código de muestra son las siguientes
$ {dbname}: nombre de la base de datos
$ {table_name}: nombre de la tabla
$ {date_slice}: valor de la partición
$ {tab_primarykey}: hay campos duplicados
$ {key_code}: la disposición de los campos repetidos se basa en el campo
fields2 = $ {fieldsTmp //, dt en $ {table_name} .dt /} es su campo de partición
2. Saque el nombre de campo de la tabla de colmena en la secuencia de comandos.
#存储到文本
hive -e "SET hive.cli.print.header=true;select * from dbname.tablename limit 0;" | sed -e "s/\t/,/g;s/data\.//g" | grep -v "WARN" > fileds.csv
#赋值给变量
fields=$(hive -e "SET hive.cli.print.header=true;select * from dbname.tablename limit 0;" | sed -e "s/\t/,/g;s/data\.//g" | grep -v "WARN")
Obtenga los nombres de campo de la tabla de colmena separados por comas
Tres, guarde los resultados de la consulta de colmena en local o hdfs
Guardar los resultados de la consulta de Hive en local
hive -e "use test;insert overwrite local directory '/tmp/score' ROW FORMAT DELIMITED FIELDS TERMINATED BY',' select * from student"
Para guardar en hdfs, solo necesita eliminar local del comando anterior.