如何在hive表中加载多行列数据?具有新行字符的列

时间:2016-10-03 12:59:06

标签: hadoop hive apache-pig bigdata

我在Excel文件中有一个列(不是最后一列),其中包含跨越几行的数据。

列的某些单元格为空白,有些单元格具有单行条目。

当保存为.CSV文件或从Excel中分隔.txt的制表符时,所有多行数据和少数单行条目都是用双引号生成的,所有空白字段都不在引号中。某些单行条目不在引号内。

是否可以将具有相同结构的数据存储在配置单元表中?如果是,怎么办? 我理解我需要在双引号内转义所有LF,并将最后一个LF作为实际的EOL处理。但是当遇到'\ n'时,Hive会将数据带到一个新行。

excel中的数据格式如下:

|------+------+--------+------------------+-------+------|
|row1: | col1 | col2   | col3(multi-line) | col4  | col5 |
|------+------+--------+------------------+-------+------|
|      |      |        | line 1 of 3      |       |      |
|row2: | abc  | defsa  | line 2 of 3      | bcde  | hft  |
|      |      |        | line 3 of 3      |       |      |
|------+------+--------+------------------+-------+------|
|row3: | abc2 | defsa2 | (blank)          | bcde2 | hft2 |
|------+------+--------+------------------+-------+------|
|row4: | abc3 | defsa3 | single-line1     | bcde3 | hft3 |
|------+------+--------+------------------+-------+------|
|row5: | abc4 | defsa4 | single-line2     | bcde4 | hft4 |
|------+------+--------+------------------+-------+------|

当保存为CVS时,它输出到以下内容:

ROW1 - COL1,COL2,COL3(多线),COL4,COL5
row2 - abc,defsa,第1行,共3“,,,,,,,
第3行 - 第2行,共3 ,,,,,,
第4行 - 第3行,共3 ,,,,,,
ROW5 - ”,BCDE,HFT
ROW6 - ABC2,defsa2,bcde2,hft2
ROW7 - ABC3,defsa3,单一号线,bcde3,hft3
ROW8 - abc4,defsa4,单2" 号线,,,,,,
第9行 - “,bcde4,hft4

5行excel到9行csv。

感知要从此.csv文件存储到hive表中的输入,如果可能的话,不改变结构并维护多行列。

1 个答案:

答案 0 :(得分:1)

From this link,提供的SerDe无法处理嵌入的新行。我的猜测是,如果你想要嵌入新行,你将不得不创建一个自定义SerDe。如果不深入研究,this是一个很好的资源,可能有助于创建自定义SerDe。

在将数据加载到Hive之前,您是否尝试使用Pig处理数据,例如在将它移动到Hive之前,您可以将\ n char替换为其他内容。但是你可能会遇到同样的问题,因为它可能使用相同的SerDe,因此无法准确地将它加载到Pig中。

最终,定制的SerDe将解决您的问题,但可能还有另一种我没有看到的更简单的方法。