我有一个结构如下的单个文件:
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)等,要包含在表中的文件的第一列。
答案 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中的目标表。