PyAthenaJDBCというPythonモジュールを使用して、付属のJDBCドライバを使用してAthenaを照会しています。 ここにリンクがあります:https://pypi.python.org/pypi/PyAthenaJDBC/java.sql.SQLExceptionPyRaisable Djangoを使用してAthenaに接続しようとしました
私はいくつかの永続的な問題に直面しています。 Athena接続を2回続けて使用するたびにこのJavaエラーが発生し続けます。
私はAthenaに接続し、データベースを表示し、新しいテーブルを作成し、コンテンツをクエリすることもできました。私は、私はアテナ接続が再び動作するためで再実行してサーバーに義務づけられています、しかし ジャンゴを使用してアプリケーションを構築し、アテナを使用するために、サーバーを実行しています、ここで
は、私が持っているクラスを垣間見るです使い方の
import os
import configparser
import pyathenajdbc
#Get aws credentials for the moment
aws_config_file = '~/.aws/config'
Config = configparser.ConfigParser()
Config.read(os.path.expanduser(aws_config_file))
access_key_id = Config['default']['aws_access_key_id']
secret_key_id = Config['default']['aws_secret_access_key']
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
athena_jdbc_driver_path = BASE_DIR + "/lib/static/AthenaJDBC.jar"
log_path = BASE_DIR + "/lib/static/queries.log"
class PyAthenaLoader():
def __init__(self):
pyathenajdbc.ATHENA_JAR = athena_jdbc_driver_path
def connecti(self):
self.conn = pyathenajdbc.connect(
s3_staging_dir="s3://aws-athena-query-results--us-west-2",
access_key=access_key_id,
secret_key=secret_key_id,
#profile_name = "default",
#credential_file = aws_config_file,
region_name="us-west-2",
log_path=log_path,
driver_path=athena_jdbc_driver_path
)
def databases(self):
dbs = self.query("show databases;")
return dbs
def tables(self, database):
tables = self.query("show tables in {0};".format(database))
return tables
def create(self):
self.connecti()
try:
with self.conn.cursor() as cursor:
cursor.execute(
"""CREATE EXTERNAL TABLE IF NOT EXISTS sales4 (
Day_ID date,
Product_Id string,
Store_Id string,
Sales_Units int,
Sales_Cost float,
Currency string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '|',
'field.delim' = '|',
'collection.delimm' = 'undefined',
'mapkey.delim' = 'undefined'
) LOCATION 's3://athena-internship/';
""")
res = cursor.description
finally:
self.conn.close()
return res
def query(self, req):
self.connecti()
try:
with self.conn.cursor() as cursor:
cursor.execute(req)
print(cursor.description)
res = cursor.fetchall()
finally:
self.conn.close()
return res
def info(self):
res = []
for i in dir(pyathenajdbc):
temp = i + ' = ' + str(dic[i])
#print(temp)
res.append(temp)
return res
建て例:
def test(request):
athena = jdbc.PyAthenaLoader()
res = athena.query('Select * from sales;')
return render(request, 'test.html', {'data': res})
作品だけで罰金!私はそれが問題を解決するだろうと思ったが、私は、私はのパスを削除しても 間違っていた:私は地元の.jarファイルを使用しています
注: しかしページを更新すると、このエラーが発生しますJDBCドライバおよびモジュールは、S3からそれをダウンロードしてみましょう、エラーが解消されない:
ファイル「/home/tewfikghariani/.virtualenvs/venv/lib/python3.4/site-packages/pyathenajdbc/connection.py」、行69、初期 ATHENA_CONNECTION_STRING .format(region = self.region_name、schema = schema_name)、props) jpype._jexception.java.sql.SQLExceptionPyRaisable: java.sql.SQLException:適切なドライバが見つかりません jdbc:awsathena://athena.us-私は自分自身でモジュールを実行したときに
west-2.amazonaws.com:443/hive/default/さらに、それだけで正常に動作します。 テンプレートをレンダリングする前にビュー内で複数の接続を設定すると、うまく動作します。
私は問題はDjangoのビューに関連していると思い、意見の一つはアテナとの接続を行っていると、次の接続はもはや不可能であり、私は、サーバーに
すべてのヘルプを再起動しない限り、エラーが発生します?他の詳細が見つからない場合は、すぐに提供します。
PS:私は、私は問題がジャンゴ のRef = https://github.com/laughingman7743/PyAthenaJDBC/に主に関連していると信じて、しかし、いくつかの更なるテストを実行した後PyAthenaJDBCのgithubの中で問題を開設しました問題/ 7 –