文件的外部HIVE表我有一個CSV與由第一列值來定義不同的記錄格式文件: 樣本數據:創建從不同的記錄格式爲csv文件
"EL","XXXXXXX", 2017-07-17
"EH","XXXXXXX",1,2017-07-17,"AAA"
"BI","XXXXXXX","AAA","BBBB"
在這種情況下,我正在獲取3個已定義記錄類型的文件。 有沒有辦法將它加載到不同的配置單元表?
文件的外部HIVE表我有一個CSV與由第一列值來定義不同的記錄格式文件: 樣本數據:創建從不同的記錄格式爲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 date,s2 string);
create table bi (s1 string,s2 string,s3 string);
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 |
+----------+------+-------+
只是爲了 - 用這種方法表示了我的假設..我需要使用len(列)爲最大記錄定義外部表。 –
是(具有最多字段數的記錄) –
可以定義一個通用的表,用5組通用字符串的列,然後定義3次輕敲該表與適當的WHERE過濾,且將適當的列選擇/轉換/重命名。 –
@SamsonScharfrichter我們是否需要爲表格定義最長的字符串列數......因爲在我的情況下,每種記錄類型的列數是可變的? –
如果這是外部表的一次性創建,請編寫一個shell腳本以根據第一列值將記錄移動到三個不同的文件中,然後在每個文件的頂部創建外部表。你也可以通過寫一個豬腳本來做到這一點 – hadooper