如何从Hive中具有不同记录结构的单个文件将数据加载到几个表中?

时间:2013-12-19 16:33:49

标签: hadoop hive

我有一个结构如下的单个文件:

A 1 2 3
A 4 5 6
A 5 8 12
B abc cde
B and fae
B bsd oio
C 1
C 2
C 3

并希望将数据加载到3个简单表中(A(int int int),B(字符串字符串)C(int))。

是否可能以及如何?

对我来说也没关系,如果A(string int int int)等,要包含在表中的文件的第一列。

2 个答案:

答案 0 :(得分:1)

正如普拉文所暗示的,我会选择选项1。我创建了一个只包含字符串的外部表,并使用FROM ( ... )语法一次插入多个表。我认为类似下面的内容会起作用

create external table source_table( line string )
stored as textfile
location '/myfile';

from ( select split( line , " ") as col_array from source_table ) cols
  insert overwrite table A select col_array[1], col_array[2], col_array[3] where col_array[0] = 'A'
  insert overwrite table B select col_array[1], col_array[2] where col_array[0] = 'B'
  insert overwrite table C select col_array[1] where col_array[0] = 'C';

答案 1 :(得分:0)

选项1)将整个数据映射到Hive表,然后使用insert overwrite table ....选项将适当的数据映射到目标表。

选项2)开发一个MR程序,将文件拆分为多个文件,然后将文件映射到Hive中的目标表。