2017-04-11 4 views
0

pyathenajdbc.connect()を使用してAthenaに接続しようとしています。マルチファクタ認証を使用してAWS認証情報を設定しています。接続文字列にAWSトークンを含めないと、次のエラーが発生します。pyathenajdbc.connect()でAWSセッショントークンを渡すときにPython 2.7からAWS Athenaにクエリできません

athena_conn = connect(access_key=AWS_KEY_ID, secret_key=AWS_SECRET, s3_staging_dir='s3://abc-pqr-xyz/processed/athena-outputs/',region_name=REGION)

EROR: pyathenajdbc.error.DatabaseError: The security token included in the request is invalid. (Service: AmazonAthena; Status Code: 400; Error Code: UnrecognizedClientException; Request ID: 0d488c0b-1eed-11e7-bad8-711e54af6b73)

私は、接続文字列でAWSトークンが含まれている場合、私は次のエラーを取得 - >

athena_conn = connect(access_key=AWS_KEY_ID, secret_key=AWS_SECRET, token=AWS_SESSION_TOKEN, s3_staging_dir='s3://abc-pqr-xyz/processed/athena-outputs/',region_name=REGION) ERROR: pyathenajdbc.error.DatabaseError: The security token included in the request is invalid. (Service: AmazonAthena; Status Code: 400; Error Code: UnrecognizedClientException; Request ID: 91751051-1eed-11e7-8347-153dfe3d84a6)

を誰もがここで間違っているものを知っています?

ここに私のコード全体があります。

from pyathenajdbc import connect 
from pyathenajdbc.util import as_pandas 
from boto3 import Session 
import jpype 
jvm_path = jpype.getDefaultJVMPath() 

_current_credentials = Session().get_credentials() 
AWS_KEY_ID = _current_credentials.access_key 
AWS_SECRET = _current_credentials.secret_key 
AWS_SESSION_TOKEN = _current_credentials.token 
REGION = "us-east-2" 

#athena_conn = connect(access_key=AWS_KEY_ID, secret_key=AWS_SECRET, s3_staging_dir='s3://abc-pqr-xyz/processed/athena-outputs/',region_name=REGION) 

athena_conn = connect(access_key=AWS_KEY_ID, secret_key=AWS_SECRET, token=AWS_SESSION_TOKEN, s3_staging_dir='s3://abc-pqr-xyz/processed/athena-outputs/',region_name=REGION) 

cursor = athena_conn.cursor(); 
query = 'SELECT * FROM xyz.ABC limit 1;' 
cursor.execute(query) 
df = as_pandas(cursor) 
print(df) 

答えて

0
from pyathenajdbc import connect 
from pyathenajdbc.util import as_pandas 
from boto3 import Session 
import os 

_current_credentials = Session().get_credentials() 

os.environ['AWS_ACCESS_KEY_ID'] = _current_credentials.access_key 
os.environ['AWS_SECRET_ACCESS_KEY'] = _current_credentials.secret_key 
os.environ['AWS_SESSION_TOKEN'] = _current_credentials.token 


athena_conn = connect(s3_staging_dir='s3://your-bucket/', 
      region_name='us-west-2', 
      aws_credentials_provider_class='com.amazonaws.athena.jdbc.shaded.com.amazonaws.auth.EnvironmentVariableCredentialsProvider') 

cursor = athena_conn.cursor(); 
query = 'SELECT * FROM schema.table_name limit 1;' 
cursor.execute(query) 
df = as_pandas(cursor) 
print(df) 
0

問題は簡単ではありませんが、私はそれがあなたの資格情報と関係があると推測しています。あなたはちょっと調べてみるべきです:あなたのキーを印刷し、それらが有効かどうかを確認してください。ここで

は、私は私の資格情報の入力に使用代替です:

import configparser  

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'] 

そうでなければ、ただ問題は、JDBCドライバに関連していないことを確認するために、次のコマンド

import pyathenajdbc 

print(pyathenajdbc.ATHENA_CONNECTION_STRING) 
print(pyathenajdbc.ATHENA_DRIVER_CLASS_NAME) 
print(pyathenajdbc.ATHENA_DRIVER_DOWNLOAD_URL) 
print(pyathenajdbc.ATHENA_JAR) 
の出力を貼り付け
+0

こんにちは、ご回答いただきありがとうございます。ここにoutput-'jdbc:awsathena:// athena。{region} .amazonaws.com:443 /ハイブ/ {schema}/ com.amazonaws.athena.jdbc.AthenaDriver https://s3.amazonaws.comがあります。 /athena-downloads/drivers/AthenaJDBC41-1.0.0.jar AthenaJDBC41-1.0.0.jar' – Guddi

+0

また、キーが有効であることを確認しました – Guddi

+0

です。私はそれがAWS Athenaのあなたの許可と関係があると思います。同じ資格情報を使用してAthenaコンソールにアクセスできるかどうかを確認してください –

1

あなたは領域が定義されている〜/ .awsフォルダの下に設定ファイルを持っていると仮定すると、あなたは)セッションを(使用することができます。

をREGION_NAME

次の作品はうまく(OSをインポートする必要はありませんでした):

from pyathenajdbc import connect 
from pyathenajdbc.util import as_pandas 
from boto3 import Session 
import jpype 
jvm_path = jpype.getDefaultJVMPath() 

_current_credentials = Session().get_credentials() 
AWS_KEY_ID = _current_credentials.access_key 
AWS_SECRET = _current_credentials.secret_key 
REGION = Session().region_name 

athena_conn = connect(access_key=AWS_KEY_ID, 
       secret_key=AWS_SECRET, 
       s3_staging_dir='path_to_staging_dir', 
       region_name=REGION) 

cursor = athena_conn.cursor(); 

query = 'SELECT current_date;' 

cursor.execute(query) 
df = as_pandas(cursor) 
print(df) 
関連する問題