Hive - 有没有办法从列表中动态创建表

时间:2015-11-11 18:13:50

标签: hive

我正在使用Hive来汇总统计数据,我想根据客户所属的行业进行细分。理想情况下,我想将每个行业的统计数据写入每个行业的单独输出文件(例如industry1_stats,industry2_stats等)。我列出了我们客户所在的各种行业,但该列表并未预先设定。

到目前为止,我从Hive文档中看到的所有内容都表明我需要事先了解我想要的表格并将其硬编码到我的Hive脚本中。有没有办法动态地执行此操作,在Hive脚本本身(首选)或通过一些外部代码启动Hive脚本之前?

2 个答案:

答案 0 :(得分:2)

我建议去寻找一个shell脚本..

获取列列表

  

hive -e'从[dbname]中选择distinct industry_name。[table_name];' >列表

遍历每一行......将列表的每一行(行业名称)作为参数传递给do while循环

  

tail -n +1 list |而IFS =''读-r industry_name   
做   
hive -hiveconf MY_VAR = $ industry_name -f my_script.hql   
完成

将shell脚本保存为 test.sh

并在 my_script.hql

  

使用uvtest;   
create table $ {hiveconf:MY_VAR}(id INT,name CHAR(10));

您必须将 test.sh my_script.hql 放在同一个文件夹中。 下面的命令应该从列名列表中创建所有表。

  

sh test.sh

请按照以下链接在shell脚本中使用配置单元: https://www.mapr.com/blog/quick-tips-using-hive-shell-inside-scripts

答案 1 :(得分:0)

我最终使用Hive的动态分区实现了这一点(每个分区写入磁盘上的单独目录,因此我可以遍历该文件)。关于分区和Hive documentation博客帖子的官方this对我特别有帮助。