impala で同時に複数のクエリを実行することは可能ですか? はいの場合、impala はどのように処理しますか?
質問する
5479 次
4 に答える
2
確かに自分でいくつかのテストを行いますが、実行する複数のクエリを取得できませんでした。Impala 接続を使用し、.sql ファイルからクエリを読み取っていました。これは、単一のコマンドで機能します。
from impala.dbapi import connect
# actual server and port changed for this post for security
conn=connect(host='impala server', port=11111,auth_mechanism="GSSAPI")
cursor = conn.cursor()
cursor.execute((open("sandbox/z_temp.sql").read()))
これは私が受け取ったエラーです。
HiveServer2Error: AnalysisException: Syntax error in line 2:
これは、SQL が .sql ファイルでどのように見えるかです。
Select * FROM database1.table1;
Select * FROM database1.table2;
指定したフォルダー内のすべての .sql ファイルを反復処理する個別の .sql ファイル内の SQL コマンドを使用して、複数のコマンドを実行できました。
#Create list of file names for recon .sql files this will be sorted
#Numbers at begining of filename are important to sort so that files will be executed in correct order
file_names = glob.glob('folder/.sql')
asc_names = sorted(file_names, reverse = False)
filename = ""
for file_name in asc_names:
str_filename = str(file_name)
print(filename)
query = (open(str_filename).read())
cursor = conn.cursor()
# creates an error log dataframe to print, or write to file at end of job.
try:
# Each SQL command must be executed seperately
cursor.execute(query)
df_id= pd.DataFrame([{'test_name': str_filename[-40:], 'test_status': 'PASS'}])
df_log = df_log.append(df_id, ignore_index=True)
except:
df_id= pd.DataFrame([{'test_name': str_filename[-40:], 'test_status': 'FAIL'}])
df_log = df_log.append(df_id, ignore_index=True)
continue
これを行う別の方法は、1 つの .sql ファイルにすべての SQL ステートメントを ; で区切ることです。次に、.sql ファイルをループしてステートメントを ; で分割します。1つずつ実行しています。
from impala.dbapi import connect
from impala.util import as_pandas
conn=connect(host='impalaserver', port=11111, auth_mechanism='GSSAPI')
cursor = conn.cursor()
# split SQL statements from one file seperated by ';', Note: last command will not have semicolon at end.
sql_file = open("sandbox/temp.sql").read()
sql = sql_file.split(';')
for cmd in sql:
# This gets rid of the non printing characters you may have
cmd = cmd.replace('/r','')
cmd = cmd.replace('/n','')
# This runs your SQL commands one at a time.
cursor.execute(cmd)
print(cmd)
于 2017-12-16T13:42:01.183 に答える
1
のようなコマンドを発行できimpala-shell -f <<file_name>>
ます。ファイルには複数のクエリがあり、各完全なクエリはセミコロン (;) で区切られています。
于 2014-04-20T00:39:29.887 に答える