自动增量的hive-PARTITION实践

迁移

所有的日志结构化,落地到 HDFS 之后,想着提供一个供运营查询的方式,上篇文章介绍了 facebook 的 presto链接, 这篇就是数据源的自动化准备的一个过程。

hive 创建外表与增加 partitions

hive 可以创建外表与内表,创建内表的过程会从原来 hdfs 路径移动数据到 hive 的默认路径, 对于这些文件还要供 spark 等调用,期望是放在一个预先创建好的路径下,外表正符合要求。

创建外表
关键字 external

1
2
CREATE external TABLE IF NOT EXISTS track_event ( id string, created_at string)
LOCATION '/user/root/external_table';

这个过程 Hive 甚至不会校验外部表的目录是否存在。因此可以在创建表格的时候在加载数据。

如何将所有的日志放到一张表内,有能加速查询呢?

hive 有个 PARTITIONED 的设计

结构化的数据可以按时间(比如间隔)成一个文件夹,

比如加载数据

1
2
3
LOAD DATA INPATH 'path'
INTO TABLE track_event
PARTITION (dt='2001-01-01');

或者命令行加载数据(这个命令可以脚本调用自动化掉)

1
hive -e "alter table track_event add partition(dt='%s');"

显示现有的表有多少 PARTITIONS

1
2
3
4
5
SHOW PARTITIONS track_event;
1 dt=16-07-08
2 dt=16-07-09
3 dt=16-07-10
...

查询实例

1
2
3
SELECT eventable_id, user_id, created_at
FROM hive.track_event_data.track_event
where dt>='16-10-01' // PARTITIONS 条件

web ui 的 presto查询

代码示例

参考文章

http://blog.csdn.net/bingduanlbd/article/details/52076219