在HIVE中加载外部表时,如何忽略括号

时间:2015-11-06 13:21:00

标签: hadoop hive tuples apache-pig

我试图加载猪脚本的摘录作为HIVE中的外部表格。 Pig将括号()(元组?)中的每一行括起来,如下所示:

(1,2,3,一)
(2,4,5-,B)
(4,2,6,C)

我无法找到一种方法告诉HIVE忽略那些导致第一列为空值的括号,因为它实际上是一个整数。

有关如何进行的任何想法?

我知道我可以在PIG中使用FLATTEN命令,但我也想学习如何直接从HIVE处理这些文件。

2 个答案:

答案 0 :(得分:0)

无法一步完成此操作。您必须采取另一个步骤,无论是使用猪中的flatten还是额外的蜂巢INSERT INTO

在Hive中,您可以多次使用split(string field, string pattern)从外部表中读取并创建所需的列,然后将其加载到新表中。但是,我总是倾向于将Pig输出转换为您想要的格式,除非从此文件中读取其他需要该格式数据的内容。它将节省您对所有数据的昂贵重读。

答案 1 :(得分:0)

Ben说没有办法一步到位......但你可以通过在hive中创建一个临时表来实现。

不确定我是否会让一张桌子变得更复杂..但它对我有用。

create external table A_TEMP (first string,second int,third int,fourth string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
LOCATION '/user/hdfs/Adata';
  

将您的数据放在“Adata”文件夹

create external table A (first int,second int,third int,fourth string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
LOCATION '/user/hdfs/Afinaldata';

现在让我们插入数据

  insert into table A
    select cast(substr(first, 2, length(first) - 2) as int),second,third,substr(fourth, 1,length(fourth) - 1 ) from A_TEMP;

我知道类型转换会达到性能......但对于给定的场景,这是我能想到的最好的。