Hive扩展表

时间:2015-03-30 17:46:45

标签: hive

当我们使用

创建时

创建外部表employee(name string,salary float)行格式分隔的字段,以','location / emp

结尾

在/ \ temp目录中有2个\ temp文件。

因此,当我们从员工运行select *时,它会从文件广告显示中获取数据。

如果其他文件也有不同类型的记录哪个列与employee表不匹配会发生什么,所以当我们运行“select * from employee”时它会尝试加载所有文件?

1.我们可以指定要加载的特定文件名吗? 2.我们可以创建具有相同位置的其他表吗?

由于 PRASHANT

2 个答案:

答案 0 :(得分:0)

它将加载emp目录中的所有文件,即使它与表格不匹配。

第一个问题。你可以使用Regex serde。如果你的数据与regex匹配,那么它会加载到表中。 regex for access log in hive serde

https://github.com/apache/hive/blob/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/serde2/RegexSerDe.java

其他选项:我指的是一些链接。这些链接有一些方法。

when creating an external table in hive can I point the location to specific files in a direcotry?

https://issues.apache.org/jira/browse/HIVE-951

第二个问题:是的,我们也可以创建具有相同位置的其他表格。

答案 1 :(得分:0)

这是你的答案 1.如果文件中的数据与表格格式匹配,则hive不会抛出错误。它试图尽可能地读取数据。如果缺少某些列的数据,则会为它们添加NULL。

  1. 否我们无法为任何表指定读取数据的文件名。 Hive会考虑表目录下的所有文件。

  2. 是的,我们可以创建具有相同位置的其他表格。