这是我的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"
我无法理解。
答案 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"')