0

Python から Hive に対して次のクエリを実行する必要があります。

SELECT * FROM user WHERE age > ${hiveconf:AGE} 

今のところ、次の作業コードスニペットがあります。

import pyhs2
with pyhs2.connect(host='localhost',
                   port=60850,
                   authMechanism="PLAIN",
                   user='hduser',
                   database='default') as conn:
    with conn.cursor() as cur:
        cur.execute("SELECT * FRPM user WHERE age > ?", 10)

したがって、PyHs2 を使用してパラメーターをクエリに渡すことができます。しかし、元のクエリを変更しないように (つまり${hiveconf:AGE}、クリーンな方法で何らかの値に置き換える)、Python コードから変数置換を実行するにはどうすればよいでしょうか?

4

2 に答える 2

1

Pythonでサブプロセスを使用できます。SQL を別のファイルに保存し、以下の形式を使用して実行できます。さらに変数を追加することもできます

 import subprocess
 value1=your_value
 p=subprocess.Popen("hive -f /sql/file/location/script.hql"+" --hiveconf variable1="+value1,shell=True,
                 stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE)
 out, err = p.communicate()

 if err==None:
    print "successfull"
else:
    print "not successfull"

または、それを実行したい場合は、以下の pyhs2 の方法が実行ステートメントの形式です。

 cur.execute("SELECT * FROM user WHERE age > %d"% 10)
于 2016-03-31T09:27:50.903 に答える