Hive Hadoop:需要根据输入文件的条件将数据加载到表中

时间:2015-04-12 04:45:00

标签: insert hive

我是Hadoop Hive的新手,刚开始在蜂巢中进行基本查询。 我的意图是我有一个输入文本文件(每行有大量的记录)。该文件的格式如下:

1;23;0;;;;1;3;2;1;1;4;5;6;;;;

1;43;6;;;;1;3;2;1;1;4;5;5;;;;

1;53;7;;;;1;3;2;1;1;4;5;2;;;;

(“;”之前的每个整数都有一个含义,我打算将它作为列名放在Hive表中 - 每行包含大约400个字段)

因此,为了插入这个,我创建了一个表“test” - 使用以下查询:

CREATE TABLE test (field1 INT, field2 INT, field3 INT, field4 INT, ... field390 INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY "\073";

我使用LOAD查询加载带有记录的文本文件,如下所示:

LOAD DATA LOCAL INPATH '/tmp/test.txt'
OVERWRITE INTO TABLE test;

现在所有字段都准确地插入到表中最多50个字段。后来我有不匹配。

我的输入格式是 - 在test.txt中的第50个字段我有一个INT编号,它决定了字段后面的字段数。

示例:

第50场: 2 - > Hive必须采用下一个 2 * 10 字段INT值并插入表中。

第50场: 1 - > Hive必须采用下一个 1 * 10 字段INT值并插入表中。其余10个字段可以设置为NULL。

(第50个字段的最大值为 2 - 所以我在表中保留了2 * 10个字段)

在第50个+(2 * 10)个字段之后,数据应该按顺序读取,就像在第50个字段之前一样。

我们是否有办法在输入中设置条件,以便在Hive中相应地插入数据。

可能会感谢您的帮助。需要一个解决方案,它不会指导我预处理test.txt然后提供给表。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以在Hive中使用where子句。

首先将数据加载到Hive原始表或HDFS中,然后再根据where子句创建表和加载数据。 的意思是:

SELECT * FROM table_reference 名称如“%venu%” GROUP BY City;

资源:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select