sql - Hive如何根据列值提取数据并写入本地文件

标签 sql database shell hadoop hive

我正在尝试从 Hive 表中提取数据并写入本地文件:

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

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

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';

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

最佳答案

将单个查询中的所有 2 年数据提取到本地文件中。之后,您可以使用 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

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

编辑 2:

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

编辑 3:

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

关于sql - Hive如何根据列值提取数据并写入本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52409462/

相关文章:

mysql - 从 MySQL 触发器/存储过程执行 Shell 脚本/命令

shell - 找不到 .sh 文件

javascript - 数据库和UI的CRUD操作最佳实践

java - hibernate :Cannot add or update a child row: a foreign key constraint fails

sql - 如何在 Oracle 11g 中获取两个日期之间的天数?

sql - View 的复杂性——综合还是构建?

sql-server - asp.net mvc 连接数据库的最佳方式

sql - Oracle SQL CASE WHEN ORA-00932 : inconsistent datatypes: expected CHAR got NUMBER 00932. 00000 - "inconsistent datatypes: expected %s got %s"

php - 从数据库中选择所有数据并使用 PHP 手动过滤

c - 不知道我是否以错误的方式复制这些整数,但我遇到了一些奇怪的错误