Сохранить выходные результаты запроса Hive через beeline в строке.пробовал бегать и с попеном но не получилось - PullRequest
0 голосов
/ 18 февраля 2019

Я выполняю запрос улья из скрипта Python.Я смог запустить его без каких-либо проблем, когда я использовал subprocess.getstatusoutput, но не смог сохранить результат в переменной.Поэтому я попытался сделать с Popen, я получаю сообщение об ошибке, говорящее о невозможности

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)

Это работает, но когда я пытаюсь напечатать query_output, он печатает все выходные данные (например, теги 'info' о всех этапахи точное о / п запроса)

вместо getstatusoutput, когда я использую subprocess.Popen или subprocess.check_output Я получаю ошибку, как показано ниже:

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

1 Ответ

0 голосов
/ 23 февраля 2019

В приложении приведен фрагмент кода Python для чтения из файла со списком таблиц, выполнения запроса куста для каждой из таблиц в списке и добавления результатов в файл с помощью подпроцесса

Переменная 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()
...