将输出拆分为 Hive 中的多个文件
Split output to multiple files in Hive
我想按一个属性拆分 SQL 个 Hive 结果并将这些文件传输到 sFTP。
当前代码执行提取,但是没有这两个要求。
在 SQL 结果中,我的属性很少。其中之一 - USER_ID - 必须作为分界点。识别新 ID 后 - 必须创建新文件。
编辑 - 添加时间戳
beeline -u jdbc:hive2:<MYHOST> -n <USER> -p <PASSWORD> --silent=true --outputformat=csv2 -f <SQL FILE> > result_+%Y%m%d_%H%M%S.csv
目标是将一个文件(直线输出)拆分为每个 USER_ID
sFTP 位置中的多个 csv 文件。
直线脚本结果:
USER | ATTR1 | ATTR2
ID1 val val
ID2 val val
ID2 val val
改造后预期结果:
USER | ATTR1 | ATTR2
ID1 val val
USER | ATTR1 | ATTR2
ID2 val val
ID2 val val
感谢@David C.Rankin
awk -v field=a -v n=1 -v dt=$(date '+%Y%m%d%H%M%S')
'FS=",";
FNR == 1 {hdg=[=10=]; next} a != {a = ; name=a"_file_"dt".csv"; n++;
print hdg >name}
{print [=10=] > name}'
sample_file.csv
我想按一个属性拆分 SQL 个 Hive 结果并将这些文件传输到 sFTP。
当前代码执行提取,但是没有这两个要求。 在 SQL 结果中,我的属性很少。其中之一 - USER_ID - 必须作为分界点。识别新 ID 后 - 必须创建新文件。
编辑 - 添加时间戳
beeline -u jdbc:hive2:<MYHOST> -n <USER> -p <PASSWORD> --silent=true --outputformat=csv2 -f <SQL FILE> > result_+%Y%m%d_%H%M%S.csv
目标是将一个文件(直线输出)拆分为每个 USER_ID
sFTP 位置中的多个 csv 文件。
直线脚本结果:
USER | ATTR1 | ATTR2
ID1 val val
ID2 val val
ID2 val val
改造后预期结果:
USER | ATTR1 | ATTR2
ID1 val val
USER | ATTR1 | ATTR2
ID2 val val
ID2 val val
感谢@David C.Rankin
awk -v field=a -v n=1 -v dt=$(date '+%Y%m%d%H%M%S') 'FS=","; FNR == 1 {hdg=[=10=]; next} a != {a = ; name=a"_file_"dt".csv"; n++; print hdg >name} {print [=10=] > name}' sample_file.csv