如何在hive

时间:2015-07-14 10:51:29

标签: hadoop hive

这是我的insert overwrite语句:

INSERT OVERWRITE DIRECTORY /myworkspace/output/f_name/20150714
select concat_ws('|',
coalesce(A,''),
coalesce(B,''),
coalesce(C,''),
coalesce(D,'')
)
FROM TABLE_A;

我得到的输出为:

  

A | B | C | d

但我希望输出为:

  

"" |" B" |" C" |" d"

我无法理解。

3 个答案:

答案 0 :(得分:1)

理想情况下,您的表定义应该定义您希望数据输出所在的格式。这可以使您无需进行大量的连接。

在这种情况下,我将定义一个表,它将使用Column delimiter作为“|” &安培;字段由'''终止

请参阅以下链接:Create Table Hive

答案 1 :(得分:0)

  

concat_ws可用于指定之间的分隔符,但在此处   你想用双引号括起字段“,所以使用concat   而不喜欢这个

select 
concat('"',coalesce(A,''),'"|"',coalesce(B,''),'"|"',coalesce(C,''),'"|"',coalesce(D,''),'"')
from table_a

答案 2 :(得分:0)

使用嵌套concats的另一种变体:

concat('"',
concat_ws('"|"',coalesce(A,''),coalesce(B,''),coalesce(C,''),coalesce(D,''))
,'"')

另一个使用regexp_replace():

regexp_replace(
concat_ws('"|"',coalesce(A,''),coalesce(B,''),coalesce(C,''),coalesce(D,''))
,'(.+)','"$1"')