以前自建部署的hive on hdfs数据仓库21年早已下线,本文档为当时简单做的日记,偶然整理文档发现,弃之可惜, 本文章留作未来可能参考使用。
自建hive维护成本太高,HDFS又太重,中小公司的趋势还是适合采用低成本的云厂商方案EMR+COS 存储数据; 且目前更流行湖仓一体+存算分离解决方案,比如京东将StarRocks当做一个请求客户端,通过创建各种数据源(Paimon、Hbase、ElasticSearch)的catalog,统一采用SQL处理数据,这样对于数据分析人员或者开发人员只需要连接对应的数据源编写SQL,降低了学习成本;对公司来说也确实达到了降本增效的目的。
废话不说了,
创建表语法结构
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type
[COMMENT col_comment], ...)] [COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)]
INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
修改hive元数据表的编码方式
创建表前需要修改hive对应元数据库编码格式,否则会中文乱码
查看Hive元数据库的编码方式
show create database hive;
修改元数据的元数据表的编码格式
创建表前需要修改hive对应元数据库编码格式,否则会中文乱码。
查看hive元数据库的编码方式
show create database hive;
修改元数据的元数据表的编码格式
修改表字段注解和表注解
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
修改分区字段注解
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
修改索引注解
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
修改 metastore 的连接 URL
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://IP:3306/db_name? createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
表操作
创建外部分区表,与内部表相比,外部表仅由Hive 管理元数据,数据文件可以存储到HDFS的任何地方;而内部表由Hive全权管理数据和元数据。
当执行删除表的操作时,外部表只是删除了表结构的元数据,真正的数据仍在;
而内部表做删除操作时,会把表结构和数据一起删除。
添加字段
alter table ods_chat_msg add columns(offline string comment '离线');
alter table ods_chat_msg add columns(
order_source string comment '订单来源',
mid string comment '新会员id',
bank_name string comment '银行行名'
);
修改注释
alter table ods_chat_msg change column bank_name bank_name string comment '分行/支行名称'
添加分区
alter table ods_chat_msg add if not exists partition(date_time='2088-08-18',type='liaozhongmin');
删除分区
alter table ods_chat_msg drop if exists partition(d='2015-01_24');
查看分区
show partitions ods_chat_msg ;
本地数据文件装载到数据表
load data local inpath '/root/a.txt' into table trade_detail;
HDFS 数据文件装载到数据表
load data inpath '/target.txt' into table trade_detail;
装载数据到指定分区表
load data local inpath '/home/a/part-00000' overwrite into table ods_chat_msg partition (resultDate='2010-08-22');
导出数据到本地文件
用HUE不好吗,谁用这玩意啊
hive -e "use chat;select * from ods_chat_msg where resultdate='2018-11-01' limit 1" > /var/lib/hadoop-hdfs/output.txt