建表操作
建立外部表
CREATE EXTERNAL TABLE dg_devicetoken_day ( id bigint, user_id bigint, device_token STRING, client_id int, badge int, ifa string, imei string, modifytime STRING ) PARTITIONED BY(p_day BIGINT) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' STORED AS RCFILE LOCATION '/user/hive/warehouse/dg/bigtables/dg_devicetoken_day';
建立临时表
临时表采用逗号 ‘,’ 分割
CREATE TABLE `dh_tmp_pt_data`( `id` string, `uid` string, `mobile` string, `client` string) row format delimited fields terminated by ',';
插入数据
查询表数据再插入
query_c="
INSERT OVERWRITE TABLE dg_devicetoken_day partition (p_day=${CUR_PARTITION}) \ select id,user_id,device_token,client_id,badge,ifa,imei,modifytime \ from dg_devicetoken \ where client_id=3 and modifytime<>''" # 插入数据 hive -e "$query_c"
插入load本地数据文件
load data local inpath '/opt/DATA/goldmine/src/an.log' into table dh_cook_tag
删除
Hive 中,仅仅删除表是不够的,如果这个表是外部表,那么还需要删除HDFS中的文件
删除分区数据
query_d="ALTER TABLE dg_devicetoken_day DROP IF EXISTS PARTITION(p_day=${BEFORE_PARTITION})"
# 删除 Hive 表数据
hive -e "$query_d"
# 删除hdfs数据
hadoop fs -rm -r /user/hive/warehouse/dg/bigtables/dg_devicetoken_day/p_day=${BEFORE_PARTITION}
# 查看数据文件是否还存在
hadoop fs -ls -h /user/hive/warehouse/dg/bigtables/dg_devicetoken_day
删除整表数据
# 删除Hive表
DROP TABLE IF EXISTS dg_devicetoken_day # 删除HDFS数据文件 hadoop fs -rm -r /user/hive/warehouse/dg/bigtables/dg_devicetoken_day