当前位置: 首页 > 知识库问答 >
问题:

来自Python的Athena Invalid刚需异常

章翔宇
2023-03-14

我试图从S3桶读取CSV文件,并通过Python在雅典娜创建表。但是我正在执行它-

DB查询的开始

{'QueryExecutionId':'9cc82243-4220-47d0-8b63-0aa4f01fd590','ResponseMetadata':{'RequestId':'1c74bec6-663a-42ef-b9d1-73c7372eb4e10s','HTTPHeader20s','HTTPHeader内容类型':'应用程序/x-amz-json-1.1','日期':'星期四,2018 年 11 月 8 日 15:37:11 GMT','x-amzn-requestid':'1c74bec6-663a-42ef- b9d1-73c7372eb4e1','内容长度':'59','连接':'保持活动'},'重试尝试':0}}

开始创建表

Traceback(最近的调用最后):

文件"C:/用户/Doc/PycharmProjects/aws-athena-repo/athena/app.py",第61行,在QueryExektionContext={'数据库':'athenadb'})

文件"C:\Program Files\Python37\lib\site-包\botocore\client.py",第320行,_api_call返回自己。_make_api_call(operation_name,kwargs)

文件"C:\Program Files\Python37\lib\site-包\botocore\client.py",第623行,_make_api_callerror_class(parsed_response,operation_name)

botocore.errorfactory.InvalidRequestException:调用StartQueryExecution操作时发生错误(InvalidRequestException):第1:8行:输入“创建外部”时没有可行的替代方案

这是我的代码示例--

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)

我不确定是行格式分隔还是其他问题。我认为我的代码很好。

详细步骤将不胜感激!

感谢在adavace!

共有1个答案

訾凯歌
2023-03-14

我使用所有的字段作为字符串和SERDEPROPERTIES作为OpenCSVSerde

 类似资料:
  • 问题内容: 有谁知道如何修理它。我正在使用Mac OS 10.8.2 问题答案: 在Python 3中是一个函数;它应该是: 正确安装或使用新版本(如果存在错误)。 在Python 3.3上工作正常。

  • 问题内容: 我有以下代码: 抛出一个。我不想在这里处理此问题,但是将异常从抛出给的调用者。 问题答案: 您的代码建议您稍后以相同的方法使用异步操作的结果,因此无论如何都必须进行处理,因此一种处理方法是 在的异步处理中抛出的所有异常都将在调用时包装为一个,除了我们已经包装在一个。 当重新引发的原因时,我们可能会遇到未检查的异常,即or的子类或我们的自定义检查的异常。上面的代码通过多次捕获来处理所有这

  • 问题内容: 我正在使用Python和psycopg2连接到Postgres。 当我插入一行时… …如何获取刚刚插入的行的ID?试: 使用时返回错误: 简单地返回。 更新:也是(即使直接在postgres中使用此命令也可以): 有人可以建议吗? 谢谢! 问题答案: 并且,请不要手动构建包含值的SQL字符串。您可以(并且应该!)单独传递值,从而不必进行转义和SQL注入: 有关更多详细信息,请参见psy

  • 背景: 下面的函数使用一个熊猫数据帧,并将其重命名为,同时对其应用2x条件。 功能: 我的问题: 虽然我的代码工作正常,但我想知道是否有一种简单且更有说服力的方法可以将2x条件应用于DataFrame并重新保存它?目前,我只是重新保存了两次,这似乎相当混乱。或者也许我错了,这是将条件应用到DataFrame的正确方法?

  • 如何使用实现以下功能? 这是完全不一样的,我实际上如何解决?

  • 我有一个actor可以从外部系统(UDP/TCP)接收消息。根据传入数据的内容,有时我希望actor回调代码的非AKA部分。 换句话说,我不想用调用和actor并等待一些传入数据,而是异步回调。 我如何实现这一点而不关闭调用对象(在创建ActorRef时会在回调中传递琐碎的内容,但这会捕获调用者)?