Hive 往表写入数据的八种方法
1. 使用 insert......select......\
语法:
select 中的字段顺序与 dest_table 的一定要一致,字段名与 dest_table 的最好要一致。
映射时是以字段顺序为准,不以字段名或字段别名为准。
insert overwrite 是覆盖目的路径下已存在的数据文件。
insert into 是继续添加记录,该路径下之前的数据依然存在。
会自动添加新分区信息,会自动新建分区路径。
2. 从本地导入数据文件:load data local inpath
语法:
实例:
目的表要先存在,不然报错。
如果该分区路径和分区信息不存在,会自动新建分区路径和添加分区信息,不用 add partition ,能直接查数。
这里的本地是指安装 Hive 的机器。
该命令相当于复制,把源文件复制到指定分区路径下,源文件依然存在。
导入的文件格式要与表的 INPUTFORMAT 格式相同才能查到数据,比如这里表的 INPUTFORMAT 是 text 格式 所以导入也需要 txt 格式的文件,不然查不到数。
用 overwrite 时,相当于覆盖,目的路径下已存在的所有文件和子目录全被移动到回收站,然后再复制。
用 into 时,相当于复制,目的路径下已存在的文件不变,如果存在同名文件,后面复制过来的文件会被重命名成新文件。
最好写上源文件的绝对路径。
3. 从 hdfs 导入数据文件:load data inpath ,不用写'local'
语法:
实例:
这里是把 hdfs 上的文件移动(剪切)到目的分区的路径下,源文件已不存在。
4. 从 hdfs 复制数据文件:dfs -cp
语法:
目的路径要先存在,不然报错'No such file or directory',
需要再手动执行 add partition 才能查到数据
源路径的'/*'表示路径下的所有文件
这是复制,源文件依然存在。
如果复制的文件较大,则需要等待几分钟或十几分钟,且期间不会有日志输出(distcp 有日志输出)。期间输入新的命令也不会有反应。
5.从 hdfs 移动数据文件:dfs -mv
语法:
目的路径要先存在,不然报错'No such file or directory',
需要再手动执行 add partition 才能查到数据。
这是剪切(移动),源文件已不存在。
6. 从 hdfs 复制数据文件:distcp
distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用 Map/Reduce 实现文件分发,错误处理和恢复,以及报告生成。
7. 从本地上传(复制)数据文件 : dfs -put
语法:
8.从本地上传(复制)数据文件 : dfs -copyFromLocal
关键词:大数据培训
评论