上文《Apache Druid系列(五)Druid导入数据介绍》我们介绍了Druid导入数据的方式,本文我们就来介绍下直接使用Druid导入本地数据的案例。下面直接开始。
1)创建测试数据
这里创建测试数据的话,我们编写一个示例代码随机生成相关的数据,最后组装成json,把数据写入一个本地文件中去。具体的示例代码如下:
UserPojo类示例代码:
package com.monitor.data;
import com.alibaba.fastjson.annotation.JSONField;
import java.util.Date;
public class UserPoJo {
private Integer id;
private String name;
private Integer age;
private String loc;
@JSONField(format="yyyy-MM-dd HH:mm:ss")
private Date birthday;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}GeneratorUserData类示例代码:
package com.monitor.data;
import com.alibaba.fastjson.JSON;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
public class GeneratorUserData {
private static final String[] names = new String[]{"张三", "李四", "王五", "赵六", "田七", "王八"};
private static final String[] locs = new String[]{"beijing", "shanghai", "chengdu", "guangzhou"};
private static final Integer[] years = new Integer[]{2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024};
private static final Integer[] months = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
private static final Random RANDOM = new Random();
public static void main(String[] args) throws Exception {
ArrayList<String> rs = new ArrayList<String>();
for (int i = 0; i < 10000;i ++) {
UserPoJo userPoJo = new UserPoJo();
userPoJo.setId(RANDOM.nextInt(100000));
userPoJo.setName(names[RANDOM.nextInt(names.length - 1)]);
userPoJo.setAge(RANDOM.nextInt(80));
userPoJo.setLoc(locs[RANDOM.nextInt(locs.length - 1)]);
userPoJo.setBirthday(getTime());
rs.add(JSON.toJSONString(userPoJo));
}
FileUtils.writeLines(new File("D:\\aaaa\\users.txt"), rs);
System.out.println();
}
private static Date getTime() {
Calendar cal = Calendar.getInstance();
// 设置年份、月份和日期
int year = years[RANDOM.nextInt(years.length - 1)];
int month = months[RANDOM.nextInt(months.length - 1)];
int dayOfMonth = 1;
cal.set(year, month, dayOfMonth);
return cal.getTime();
}
}最后我们运行程序就会生成一个名称为users.txt的数据文件,示例图如下:
2)druid导入本地文件数据
接着我们就使用druid导入刚才生成的users.txt文件。首先我们把这个users.txt文件上传到druid所有节点的服务器上,并且放在同一个目录下,例如:
备注:
1、这里如果整个druid集群有5台机器,不管是master,还是query,还是data节点都需要把这个users.txt上传上去。 2、每台服务器上这个users.txt文件一定要放在同一个目录下。
待文件上传到服务器之后,我们使用web的形式进入到druid的dashboard上,点击界面上的load data,然后选择Batch - SQL,示例图如下:
然后这里点击这个Local Disk,右侧会出现两个数据框,示例图如下:
这里主要是输入刚才上传到服务器上的users.txt文件,示例如下:
填写完成之后,我们点击这里的Connect data按钮,页面上就会展示出来刚才生成的users.txt文件,示例图如下:
这里我们查看数据能加载出来就代表没问题,然后点击右下角的next按钮,就会进入下面的界面:
这个界面相当于自动根据json解析出来了对应的文件数据。在druid中一般都有一个时间的列作为时间戳列,这里我们可以看到自动生成了_time这列:
如果没有时间列的话我们可以使用指定其他的列作为时间列或者Node作为固定的时间列。如果要设置分区的话,那么我们可以直接选择对应的时间咧指标即可,如下图:
这里我们选择以月作为分区,接着点击右下角的start loading data按钮:
点击之后就会开始进行加载了,如下图:
当出现如下图内容,就代表数据加载完了:
3)查询导入的数据
接着我们来查询下导入的数据,点击query,就可以看到有对应的users表了,示例如下:
然后我们可以在右侧使用sql查询对应的数据,示例如下:
可以看到没有任何问题。查询很方便。
有细心的同学可能看出一个问题,就是这里我们导入的原始字段birthday不见了,这个是为什么呢?这是因为在导入的时候,Loaddata这一步,
druid自动转换了birthday之后就把它给清理掉了,所以在这里我们点击Add Column的按钮:
然后把birthday的字段给他添加进来就可以了:
点击apply之后,就可以在左侧看到birthday字段加载出来了:
接着点击start loading data按钮把数据导入进去就可以查询结果了。




























还没有评论,来说两句吧...