我试图加载猪脚本的摘录作为HIVE中的外部表格。 Pig将括号()(元组?)中的每一行括起来,如下所示:
(1,2,3,一)
(2,4,5-,B)
(4,2,6,C)
我无法找到一种方法告诉HIVE忽略那些导致第一列为空值的括号,因为它实际上是一个整数。
有关如何进行的任何想法?
我知道我可以在PIG中使用FLATTEN命令,但我也想学习如何直接从HIVE处理这些文件。
答案 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;
我知道类型转换会达到性能......但对于给定的场景,这是我能想到的最好的。