最近这个项目做hive建表在导入数据的时候,数据量大的时候难免会慢一点,现在又发现了一种新的导入数据方式;
使用hdfs的文件进行导入,所以要使用的话就得先把文件上传到hdfs再操作
三个前提:1.文件必须已经上传到hdfs,否则不行。2.这个表必须是不存在的,不能在已表上进行叠加数据;3.必须是目录级别,不能具体到文件;如果目录底下有多个文件,将会把所有文件数据都导入进去;如果正好需要将目录下所有文件都导入那就最合适了。
如果都可以满足那就接着往下看吧,
@Test
public void createHiveTableAndData() {
String sql = "create external table 库.表名(\n" +
"id string\n" +
",names string\n" +
",sex string\n" +
",age string\n" +
",psd string\n" +
",post string\n" +
")\n" +
"row format delimited fields terminated by ','\n" +
"stored as textFile\n" +
"location '/dataFiles/offlineFile/201911280/'";
hiveJdbcBaseDaoImpl.getJdbcTemplate().execute(sql);
}
就是一个建表语句,默认是 , 进行分割,我使用的是csv和json两种格式;
"location '/dataFiles/offlineFile/201911280/'"; 这个目录就是hdfs目录
这是我目前知道的最快方式,之前用的都是 load data local inpath 方式;
String sql = "load data local inpath '" + filepath + "' into table person" ;
如果有兴趣需要了解可以在找我其他博客。基本都有更新;
有更好的方式还请留言讨论 ~ 或者+q:983469079