我有一个进程,它将下载一个文件,然后将其解压缩为文件,然后发送到HDFS。我们看到了一种优化方法,如下所示,使用命令--stdout,它为我们创造了奇迹:
gunzip --to-stdout "${FULLNAME}" | hdfs dfs -put - "${path_folder}/${PROCESS}"
我的问题是关于标准输出:
是否可以对sql查询执行类似的操作?也就是说,抛出您得到的结果,并将其与文件名一起发送到HDFS?
我们有这样的东西,它生成一个文件,然后将其发送到hdfs。
sqlplus -S user/password@dbname << EOF > file_name.txt
set feedback off trimspool on
select * from table_name;
exit;
EOF
hdfs dfs -put file_name.txt ${path_folder}
我想知道的是,是否有一种方法可以在不将输出重定向到文件的情况下从输出中获取输出,而是直接将其发送到HDFS,就像我放的解压缩示例一样?
与原始示例一样,您也可以使用管道(|
(重定向sqlplus命令。只需将管道与第一个EOF
:放在同一条线上
sqlplus -S user/password@dbname << EOF | hdfs dfs -put - ${path_folder}/file_name.txt
set feedback off trimspool on
select * from table_name;
exit;
EOF
只需像您的示例中那样重定向
sqlplus -S user/password@dbname <<EOF | hdfs dfs -put - ${path_folder}
set feedback off trimspool on
select * from table_name;
exit;
EOF
如果它可以重定向到一个文件,那么它就可以重定向到管道。