hive的数据修改更新问题解决
来源:互联网 发布:mysql 快照备份 编辑:程序博客网 时间:2024/05/18 05:11
由于hive是一个数据仓库。是一个基于日志的分析和统计。底层的数据应该是稳定的,与oracle不同的是,数据不是经常变化的。但是在日常的业务中经常有修改数据的需求。有的数据是经常变化的。需要维护一个经常变化的表。我通过一些项目,总结了一下几个方法:
1 如果数据量不大,可以尝试周期的覆盖原始数据的方法。根据需求,对数据进行周期的更新,再导入的时候对数据进行覆盖操作。
2 对数据库的数据或者日志进行一个更新日期的字段标注。如果数据量很大,那么就每天导入最新的数据。当然这样就是有一条数据,不同的更新日期的数据。这样在查询的时间取最新的时间进行统计。这样可以根据更改时间,解决数据更新的需求。维护一个最新的状态。
一下是第一种方案的例子:
加载数据到表时,hive不会做任何转换。加载操作是纯粹的复制/移动操作,移动数据文件到相应的hive表。
语法
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
实例
假设hive的warehouse目录是/user/hadoop/warehouse,这里有一个login表
CREATE TABLE login ( uid BIGINT, ip STRING)PARTITIONED BY (dt STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','STORED AS TEXTFILE;
对应有一个用户登录日志文件,文件内容如下:
888,8.8.8.8999,9.9.9.9
注意,列与列之间是用','号隔开,第一列是uid,第二列是用户ip。
接着加载数据
LOAD DATA LOCAL INPATH '/data/login/20130101.csv' OVERWRITE INTO TABLE login PARTITION (dt='20130101');
这表示从本地磁盘,把文件 '/data/login/20130101.csv' 拷贝到表login,分区dt为'20130101'的目录(在HDFS)下.加载成功后,20130101.csv会放置在 hdfs://namenode:9000/user/hadoop/warehouse/login/dt=20130101/20130101.csv。
OVERWRITE表示目标表(或分区)在数据加载前会删除,然后替换为新的数据。如果不指定OVERWRITE,则会追加数据到目标表(或分区)下,如果文件名和目标目录的文件冲突,会自动改名。
LOCAL如果不指定,就是从HDFS的'/data/login/20130101.csv'移动数据到表login,分区分区dt为 '20130101'的目录下。即是,原来的HDFS文件'/data/login/20130101.csv'是被移动到hdfs: //namenode:9000/user/hadoop/warehouse/login/dt=20130101/20130101.csv。
注意:加载的文件名不能是一个子目录,hive做一些最简单的检查,以确保正在加载的文件和目标表匹配。目前,它会检查,如果该表存储为sequencefile格式 - 正在加载的文件是反序列化。
- hive的数据修改更新问题解决
- 数据的更新或修改
- Hive数据倾斜问题解决方案
- 【甘道夫】实现Hive数据同步更新的shell脚本
- HIVE中数据更新(update)操作的实现
- Medoo Update的使用:修改更新数据
- 数据更新、视图的创建与修改
- 插入并更新修改的表数据
- 数据库表的更新和修改数据
- hive和hue的元数据 修改为mysql
- hive修改MySQL里的元数据删除分区
- hive的JDBC编码问题解决
- 修改qt QTableView里的modal数据并更新数据
- hive-修改hive表字段的注释
- hive问题解决
- 当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand问题解决
- 工作札记:JBoss下jsp页面修改后没有动态更新的问题解决方案
- hive修改表名后查询不出数据
- 搭建Android MQTT推送平台
- UDP编程中的connect
- ntf 挂载出现的问题
- 【Github教程】史上最全github使用方法:github入门到精通
- (转)关于Java IO流学习总结
- hive的数据修改更新问题解决
- 黑马程序员-正则表达式
- [leetcode刷题系列]Longest Common Prefix
- 在JAVA中查询刚插入的记录ID 利用JDBC的getGeneratedKeys获得INSERT插入后生成的主键ID
- Halcon C#.net 编程指导(1): 使用HALCIN/.NET控件
- 委托的N种写法,你喜欢哪种?
- 制作饼图应注意的问题
- 解决LinkBar.selectedInex设置无效的问题
- 一步一步将你的C#程序部署到Android