hive 数据库

1. 本地导入

  1. 常用)连接hive数据库,读取csv后写入,该方法使用时,df的一列不能均为空值None,否则无法识别数据类型,另外,hive入库的时候会遇到转义字符的问题,尤其是网页爬虫的长文本数据,可以通过re.escape(str(x))将字符串转义。
hive_ctx = HiveContext(spark)

df = pd.read_csv(path + file_name, encoding='utf-8')
df = df.fillna('')
values = df.values.tolist()
columns = df.columns.tolist()
df = spark.createDataFrame(values, columns)
df.write.format("Hive").mode(
    "overwrite").saveAsTable(DB + "." + table)
  1. xshell命令

csv文件以逗号分割,当某个字段的格式为:"xxx, yyy, zzz"时,导入hive数据库可能发生错误,需要使用转义字符创建表,命令如下:

create table customs_news(AAA STRING, BBB STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITH SERDEPROPERTIES ("separatorChar" = ",","quoteChar" = "\"","escapeChar" = "\\");

创建表后将本地文件导入hive,命令如下:

load data local inpath '/XXX/XXX/XXX.csv' into table customs_news;

2. 导出至本地

  1. 常用)连接hive数据库,转为pandas后写入csv
df = hiveCtx.sql("select * from data_platform.tender_info_10")
df_1 = df.toPandas()
df_1.to_csv(path + file_name, encoding='utf-8', index=False)
  1. xshell命令:
hive -e "select * from data_platform.user_dict" > /data/user_dict_2020.5.27.txt
  1. 连接hive数据库,读取并保存为csv
df = hiveCtx.sql("select * from DB.TABLE")
df.write.format("csv").option("header", "true").mode("overwrite").save("/user/root")

此时,csv保存在hdfs中,需要在xshell中输入以下命令保存至本地

hadoop fs -getmerge /user/root/* XXXXX.csv

3. 新增一列并赋值

采用以下命令新增一列时该列的值是NULL,hive无法通过alter…default …命令赋初始值。

alter table old add columns(colname string) ;

一种办法是:已有旧表old,创建与旧表相同的字段(或自己需要的,如果完全一样可以select *,否则需要指定select的字段)、以及新增的一列col的新表new,采用insert语句赋初始值。

insert into table new select *, 0 as colname from old;

4. 常用命令

常用命令和sql语句基本类似,但hive表没有删除某列、某行数据的sql语句

  1. 修改表的列名
ALTER TABLE table_name CHANGE old_col_name new_col_name col_type;
  1. 向表中插入一行数据
insert into user_dict(word) values('XXXX');
  1. 清空表
truncate table data_platform.user_dict;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值