Hive 从csv文件的不同记录格式的文件创建外部配置单元表
我有一个CSV文件,它具有由第一列值定义的不同记录格式: 样本数据:Hive 从csv文件的不同记录格式的文件创建外部配置单元表,hive,hdfs,Hive,Hdfs,我有一个CSV文件,它具有由第一列值定义的不同记录格式: 样本数据: "EL","XXXXXXX", 2017-07-17 "EH","XXXXXXX",1,2017-07-17,"AAA" "BI","XXXXXXX","AAA","BBBB" 在本例中,我将获得具有3种已定义记录类型的文件。 有没有办法将其加载到不同的配置单元表?演示版 create table el (s1 string,d1 date); create table eh (s1 string,i1 int,dt1 da
"EL","XXXXXXX", 2017-07-17
"EH","XXXXXXX",1,2017-07-17,"AAA"
"BI","XXXXXXX","AAA","BBBB"
在本例中,我将获得具有3种已定义记录类型的文件。
有没有办法将其加载到不同的配置单元表?演示版
create table el (s1 string,d1 date);
create table eh (s1 string,i1 int,dt1 date,s2 string);
create table bi (s1 string,s2 string,s3 string);
您可以定义一个具有5个通用字符串列的通用表,然后使用适当的WHERE筛选和适当的列选择/转换/重命名来定义3个视图。@SamsonScharfrichter我们需要为该表定义最长的字符串列数吗..因为在我的例子中,每个记录类型中的列数是可变的?如果这是一次性创建外部表,请编写一个shell脚本,根据第一列值将记录移动到三个不同的文件中,然后在每个文件的顶部创建外部表。你可以通过写一个猪的脚本来做到这一点too@hadooper,到目前为止,我已经将此作为一种替代方法..我正在寻找是否有其他方法可以不分割文件,并且仍然能够创建必要的外部表,只是为了重新询问我使用此方法的假设。。我需要使用len(列)来定义外部表,用于最大的记录?是(字段数最大的记录)
create external table myfile
(
c1 string
,c2 string
,c3 string
,c4 string
,c5 string
)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties
(
'separatorChar' = ','
,'quoteChar' = '"'
,'escapeChar' = '\\'
)
stored as textfile
;
select * from myfile;
+-----+----------+--------------+-------------+-------+
| c1 | c2 | c3 | c4 | c5 |
+-----+----------+--------------+-------------+-------+
| EL | XXXXXXX | 2017-07-17 | NULL | NULL |
| EH | XXXXXXX | 1 | 2017-07-17 | AAA |
| BI | XXXXXXX | AAA | BBBB | NULL |
+-----+----------+--------------+-------------+-------+
from myfile
insert into el select c2,c3 where c1='EL'
insert into eh select c2,c3,c4,c5 where c1='EH'
insert into bi select c2,c3,c4 where c1='BI'
;
select * from el;
+----------+-------------+
| s1 | d1 |
+----------+-------------+
| XXXXXXX | 2017-07-17 |
+----------+-------------+
select * from eh;
+----------+-----+-------------+------+
| s1 | i1 | dt1 | s2 |
+----------+-----+-------------+------+
| XXXXXXX | 1 | 2017-07-17 | AAA |
+----------+-----+-------------+------+
select * from bi;
+----------+------+-------+
| s1 | s2 | s3 |
+----------+------+-------+
| XXXXXXX | AAA | BBBB |
+----------+------+-------+