Athena InvalidRequestException от Python - PullRequest
       60

Athena InvalidRequestException от Python

0 голосов
/ 08 ноября 2018

Я пытаюсь прочитать файл CSV из корзины S3 и создать таблицу в Афинах через Python. Но я получаю ниже его выполнение -


Начало запроса к БД

{'QueryExecutionId': '9cc82243-4220-47d0-8b63-0aa4f01fd590', 'ResponseMetadata': {'RequestId': '1c74bec6-663a-42ef-b9d1-73c7372eb4e1', 'HTTP' Hatt: : {'content-type': 'application / x-amz-json-1.1', 'date': 'чт, 08 ноя. 2018 15:37:11 GMT', 'x-amzn-requesttid': '1c74bec6-663a -42ef-b9d1-73c7372eb4e1 ',' content-length ':' 59 ',' connection ':' keep-alive '},' RetryAttempts ': 0}}

Начало создания таблицы

Traceback (последний вызов был последним):

Файл "C: /Users/Doc/PycharmProjects/aws-athena-repo/athena/app.py", строка 61, в QueryExecutionContext = {'База данных': 'athenadb'})

Файл "C: \ Program Files \ Python37 \ lib \ site-packages \ botocore \ client.py", строка 320, в _api_call вернуть self._make_api_call (имя_операции, kwargs)

Файл "C: \ Program Files \ Python37 \ lib \ site-packages \ botocore \ client.py", строка 623, в _make_api_call поднять error_class (parsed_response, имя_операции)

botocore.errorfactory.InvalidRequestException: произошла ошибка (InvalidRequestException) при вызове операции StartQueryExecution: строка 1: 8: нет жизнеспособной альтернативы при вводе 'CREATE EXTERNAL'


Вот мой пример кода -

print("Start of DB Query")
# Create a new database
db_query = 'CREATE DATABASE IF NOT EXISTS athenadb;'
response = client.start_query_execution(
    QueryString=db_query,
    ResultConfiguration={'OutputLocation': 's3://mybucket'})
print(response)

table_query = '''
CREATE EXTERNAL TABLE IF NOT EXISTS `athenadb.testtable`(
    `id` int,
    `ident` string,
    `type` string,
    `name` string,
    `latitude_deg` double,
    `longitude_deg` double,
    `continent` string,
    `iso_country` string,
    `iso_region` string,
    `municipality` string,
    `scheduled_service` string,
    `gps_code` string,
    `iata_code` string,
    `local_code` string,
    `home_link` string,
    `wikipedia_link` string,
    `keywords` string 
)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
  LINES TERMINATED BY '\n' 
WITH SERDEPROPERTIES ( 
  'escape.delim'='\\')
STORED AS TEXTFILE
LOCATION 's3://mybucket/folder/' ;'''

print("Start of table creation")

response1 = client.start_query_execution(
    QueryString=table_query,
    ResultConfiguration={'OutputLocation': 's3://mybucket'},
    QueryExecutionContext={'Database': 'athenadb'})
print(response1)

Я не уверен, что проблема в ROW FORMAT DELIMITED или в другом месте. Я думаю, что мой код в порядке.

Подробные шаги приветствуются!

Спасибо в adavace!

1 Ответ

0 голосов
/ 13 ноября 2018

Я использовал все поля как String и SERDEPROPERTIES как OpenCSVSerde

...