2017-03-17 18 views
2

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ファイルを使用しています

Error

注: しかしページを更新すると、このエラーが発生します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のビューに関連していると思い、意見の一つはアテナとの接続を行っていると、次の接続はもはや不可能であり、私は、サーバーに

すべてのヘルプを再起動しない限り、エラーが発生します?他の詳細が見つからない場合は、すぐに提供します。

+0

PS:私は、私は問題がジャンゴ のRef = https://github.com/laughingman7743/PyAthenaJDBC/に主に関連していると信じて、しかし、いくつかの更なるテストを実行した後PyAthenaJDBCのgithubの中で問題を開設しました問題/ 7 –

答えて

1

更新: githubで問題を投稿した後、著者はこの問題を解決し、完全に動作する新しいバージョンをリリースしました。 JPypeでマルチスレッドの問題でした。

質問が回答しました!

REF:https://github.com/laughingman7743/PyAthenaJDBC/pull/8

関連する問題