17
17
from pyathena .async_cursor import AsyncCursor
18
18
from pyathena .error import OperationalError
19
19
from pyathena .model import AthenaQueryExecution
20
+ from pyathena .util import RetryConfig
20
21
21
22
22
23
@dataclass
@@ -26,6 +27,8 @@ class AthenaCredentials(Credentials):
26
27
s3_staging_dir : str
27
28
region_name : str
28
29
threads : int = 1
30
+ max_retry_number : int = 5
31
+ max_retry_delay : int = 100
29
32
30
33
_ALIASES = {
31
34
'catalog' : 'database'
@@ -36,7 +39,12 @@ def type(self) -> str:
36
39
return 'athena'
37
40
38
41
def _connection_keys (self ) -> Tuple [str ]:
39
- return ('s3_staging_dir' , 'database' , 'schema' , 'region_name' )
42
+ return (
43
+ 's3_staging_dir' ,
44
+ 'database' ,
45
+ 'schema' ,
46
+ 'region_name'
47
+ )
40
48
41
49
42
50
class CursorWrapper (object ):
@@ -168,7 +176,8 @@ def open(cls, connection):
168
176
s3_staging_dir = credentials .s3_staging_dir ,
169
177
region_name = credentials .region_name ,
170
178
schema_name = credentials .database ,
171
- cursor_class = AsyncCursor
179
+ cursor_class = AsyncCursor ,
180
+ retry_config = RetryConfig (attempt = credentials .max_retry_number , max_delay = credentials .max_retry_delay )
172
181
)
173
182
connection .state = 'open'
174
183
connection .handle = ConnectionWrapper (conn , credentials .threads )
0 commit comments