Hive 表增删改查CRUD操作

建表操作

建立外部表

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

你可能感兴趣的:(Hive)