将配置单元控制台输出转换为文本或csv

emeijp43  于 2021-06-25  发布在  Hive
关注(0)|答案(3)|浏览(272)

我需要对配置单元表执行计数,并将结果输出到文本文件中,然后将其作为触发器放到另一个位置。
当前配置单元输出如下所示:

+-------------+----------+
|     _c0     |   _c1    |
+-------------+----------+
| 2020-03-01  | 3203500  |
+-------------+----------+

我尝试了以下选项:

hive -e 'select CURRENT_DATE, count(*) from db.table;' | sed 's/[[:space:]]\+/,/g' > /trigger/trigger_file.txt

但它并没有给出预期的结果。我还能试什么?
.txt文件中的预期结果如下:

2020-03-01,3203500
rkttyhzu

rkttyhzu1#

配置单元提供了写入文件的内置命令

INSERT OVERWRITE LOCAL DIRECTORY '/home/docs/temp' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from db.table;

其他方式

hive -S -e 'set hive.cli.print.header=false; select * from db.table' | sed 's/[[:space:]]\+/,/g' > /home/docs/temp.csv
8zzbczxx

8zzbczxx2#

你可以替换你的sed 命令 

awk -F'[| ]+' '$2 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/{print $2","$3}'

这个 -F'[| ]+' 将字段分隔符设置为 [| ]+ 匹配一个或多个空格或管道字符的正则表达式,然后获取第二个字段匹配类似日期模式的所有记录( [0-9]{4}-[0-9]{2}-[0-9]{2} ,请参见演示),并在第二列和第三列值之间使用逗号和空格打印。

o4hqfura

o4hqfura3#

为了避免使用sed..等替换所有结果,请尝试使用以下方法 concat_ws(',',col1,col2...etc) 结果将有 , 分离数据!

hive -e 'select CONCAT_WS(',',CURRENT_DATE, count(*)) from Mytable' > /home/user/Mycsv.csv

相关问题