python—通过直线将配置单元查询的输出结果存储在字符串中也试过和波彭一起跑步,但没有成功

2admgd59  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(378)

我正在从python脚本运行配置单元查询。当我使用subprocess.getstatusoutput时,我能够运行它而没有任何问题,但是无法将结果存储到变量中。所以我试着用波本,我得到一个错误,说不能

dd1 = '10-Sep-12'
table = 'testing_table'
1> query = "select distinct(input__file__name) from <db_name>." + table + " where as_of_date =" +"'"+ dd1 +"'"+ " limit 2"

2> cmd = 'beeline -u "jdbc:hive2:<connection string>" -e "'+query + ';"'

3> stat, query_output = subprocess.getstatusoutput(cmd)

这是可行的,但是当我试图打印查询输出时,它会打印所有的输出(比如所有阶段的'info'标签和查询的确切o/p)
当我使用subprocess.popen或subprocess.check\u output时,出现如下错误,而不是getstatusoutput:

FileNotFoundError: [Errno 2] No such file or directory: 'beeline -u "<connection string>" -e "select distinct(input__file__name) from <db_name>.<table_name> where as_of_date =\'10-Sep-12\' limit 2;"'
hec6srdp

hec6srdp1#

attached是一个python代码段,用于从带有表列表的文件中读取数据,并对列表中的每个表运行配置单元查询,并使用subprocess将结果附加到文件中

cmd变量存储从子进程fns调用的要执行的命令,输出存储到变量中,该变量稍后写入文件。下一组步骤读取在第一个步骤中创建的文件,并执行另一个查询并写入另一个文件。

import subprocess
cmd= """ hive -e "use database; show tables;" """
val= subprocess.check_output(cmd,shell=True)        
fl = open('/home/ouput_all_table_list.txt', 'w')
fl.write(val)
fl.close()

fl = open('/home/ouput_all_table_list.txt', 'r')
content = fl.read().splitlines()
for var in content:
    tbl_nm= "'" + var + "'" 
    cmd_ay= 'hive -e "use database; select collect_list(cast(file_dt as string)) as dt, collect_list(cast(cnt as string)) as cnt, '+ tbl_nm +' from (select count(1) cnt,file_dt from database.' + var + ' group by file_dt having count(1) > 0  order by file_dt desc) a;"'
    print cmd_ay
    cmd_out= subprocess.check_output(cmd_ay,shell=True)
    print cmd_out
    fh = open('/home/ouput_all_hive_count_data.txt', 'a')
    fh.write(cmd_out)
    fh.close()

相关问题