我正在尝试将pig脚本的摘录作为配置单元中的外部表加载。pig将每一行括在括号()之间(元组?),如下所示:(1、2、3、a)(2、4、5、b)(4、2、6、c)我找不到方法告诉hive忽略那些括号,这会导致第一列的值为空,因为它实际上是一个整数。你对如何进行有什么想法吗?我知道我可以在pig中使用flatten命令,但我也想学习如何直接从hive处理这些文件。
a11xaf1n1#
正如本所说,没有办法一步到位。。但您可以通过在配置单元中再创建一个临时表来实现。不知道我是不是又多了一张table让事情变得更复杂。。但对我有用。
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;
我知道类型铸造会影响性能。。但对于给定的场景,这是我能想到的最好的方法。
ugmeyewa2#
这是不可能一步到位的。你得再走一步 flatten 在Pig或一个额外的Hive里 INSERT INTO .在Hive里你可以用 split(string field, string pattern) 多次从外部表中读取并创建所需的列,然后将其加载到新表中。然而,我总是倾向于将pig输出转换成您想要的格式,除非从这个文件中读取的其他东西期望数据是这种格式。它将节省昂贵的所有数据重读。
flatten
INSERT INTO
split(string field, string pattern)
2条答案
按热度按时间a11xaf1n1#
正如本所说,没有办法一步到位。。但您可以通过在配置单元中再创建一个临时表来实现。
不知道我是不是又多了一张table让事情变得更复杂。。但对我有用。
将数据放在“adata”文件夹下
现在让我们插入数据
我知道类型铸造会影响性能。。但对于给定的场景,这是我能想到的最好的方法。
ugmeyewa2#
这是不可能一步到位的。你得再走一步
flatten
在Pig或一个额外的Hive里INSERT INTO
.在Hive里你可以用
split(string field, string pattern)
多次从外部表中读取并创建所需的列,然后将其加载到新表中。然而,我总是倾向于将pig输出转换成您想要的格式,除非从这个文件中读取的其他东西期望数据是这种格式。它将节省昂贵的所有数据重读。