Sql 配置单元如何基于列值提取数据并写入本地文件

Sql 配置单元如何基于列值提取数据并写入本地文件,sql,database,shell,hadoop,hive,Sql,Database,Shell,Hadoop,Hive,我正在尝试从配置单元表提取数据并写入本地文件: 每列“日期”值一个输出文件。我的配置单元表将有大约2年以上的数据历史,这意味着我将需要大约700多个不同的输出文件 我目前的知识只允许我每次运行写一个文件,这是我的代码可以在配置单元命令行中运行: INSERT OVERWRITE LOCAL DIRECTORY '/local/hive/temp' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select date, col1, col2, col3

我正在尝试从配置单元表提取数据并写入本地文件:

每列“日期”值一个输出文件。我的配置单元表将有大约2年以上的数据历史,这意味着我将需要大约700多个不同的输出文件

我目前的知识只允许我每次运行写一个文件,这是我的代码可以在配置单元命令行中运行:

INSERT OVERWRITE LOCAL DIRECTORY '/local/hive/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select date, col1, col2, col3, col4, col5
from WH_TEMP_EXTRACT.table_temp
where date='2015-09-17';

我不是开发人员,但目前正在研究执行此任务的所有选项。非常感谢您在这里提供的帮助。

通过一次查询将所有两年数据提取到本地文件中。之后,您可以使用awk命令将它们放入单独的文件中,如下所示

/tmp/hive> ls -l
total 4
-rw-r--r-- 1 xxxxxxx yyyyyy 228 Sep 20 10:11 hive_extract.dat
/tmp/hive> cat hive_extract.dat
2018-09-17,abc,134
2018-09-17,abc,135
2018-09-17,abc,136
2018-09-17,abc,137
2018-09-17,abc,138
2018-09-18,abc,141
2018-09-18,abc,142
2018-09-18,abc,143
2018-09-18,abc,144
2018-09-19,abc,150
2018-09-19,abc,151
2018-09-19,abc,152
/tmp/hive> awk -F"," '{ print $0 > "file_"$1 }' hive_extract.dat
/tmp/hive> ll
total 28
-rw-r--r-- 1 xxxxxxx yyyyyy 228 Sep 20 10:11 hive_extract.dat
-rw-r--r-- 1 xxxxxxx yyyyyy  57 Sep 20 10:13 file_2018-09-19
-rw-r--r-- 1 xxxxxxx yyyyyy  76 Sep 20 10:13 file_2018-09-18
-rw-r--r-- 1 xxxxxxx yyyyyy  95 Sep 20 10:13 file_2018-09-17
/tmp/hive> cat file_2018-09-17
2018-09-17,abc,134
2018-09-17,abc,135
2018-09-17,abc,136
2018-09-17,abc,137
2018-09-17,abc,138
/tmp/hive> cat file_2018-09-18
2018-09-18,abc,141
2018-09-18,abc,142
2018-09-18,abc,143
2018-09-18,abc,144
/tmp/hive> cat file_2018-09-19
2018-09-19,abc,150
2018-09-19,abc,151
2018-09-19,abc,152
/tmp/hive>
让我知道这个解决方案是否适合您

编辑1: 使用gsub

编辑2:

awk -F"," 'BEGIN { OFS=","} { gsub("-","_",$1); print $0 > "file_"$1 }' hive_extract.dat
awk -F"," '{ fx=$1;gsub("-","_",fx);print $0 > "file_"fx }' hive_extract.dat
编辑3:

awk -F"," 'BEGIN { OFS=","} { gsub("-","_",$1); print $0 > "file_"$1 }' hive_extract.dat
awk -F"," '{ fx=$1;gsub("-","_",fx);print $0 > "file_"fx }' hive_extract.dat

嗨,这是一个很好的方法,谢谢。我对这个命令有一个问题,awk-F“,”{print$0>“file”{1}“hive\u extract.dat,如何将新的输出文件命名约定更改为“file\u YYYY\u MM\u DD”?数据中的日期列在YYYY-MM-DD之间有破折号“-”,不能更改。如何将输出文件更改为在YYYY-MM-DD之间使用下划线“\u1”链接?这很简单。使用gsub并将“-”转换为“,”{gsub(“-”,”,“,$1”);打印$0>“文件”$1}“hive\u extract.dat您的代码确实重命名了新文件,但也删除了数据中的逗号分隔符,如何修改它以保持数据不变?awk-F“,”{gsub(“-”,”,”,$1);print$0>“file”$1}“hive_extract.date.g.,数据中已删除逗号。20180917太棒了!谢谢你的帮助。。我现在需要学习更多linux命令..>。