我正在将 AWS 与 Athena Iceberg 结合使用。 我尝试使用 boto3 向 Athena 冰山表插入新记录,但出现内部错误 GENERIC_INTERNAL_ERROR: 无法在没有事务冲突的情况下提交。如果数据 list 文件是在 * 生成的 - 我猜 boto3 会尝试像常规 Athena 表一样将文件添加到 s3。 任何想法:
...
import boto3
import pandas as pd
def athena_query_to_dataframe(db, s3Bucket, query):
client = boto3.client('athena')
listOfStatus = ['SUCCEEDED', 'FAILED', 'CANCELLED']
listOfInitialStatus = ['RUNNING', 'QUEUED']
print('Starting Query Execution:')
tempS3Path = 's3://{}'.format(s3Bucket)
response = client.start_query_execution(
QueryString = query,
QueryExecutionContext = {
'Database': db
},
ResultConfiguration = {
'OutputLocation': tempS3Path,
}
)
queryExecutionId = response['QueryExecutionId']
print(client.get_query_execution(QueryExecutionId = queryExecutionId))
status = client.get_query_execution(QueryExecutionId = queryExecutionId)['QueryExecution']['Status']['State']
while status in listOfInitialStatus:
status = client.get_query_execution(QueryExecutionId = queryExecutionId)['QueryExecution']['Status']['State']
if status in listOfStatus:
if status == 'SUCCEEDED':
print('Query Succeeded!')
paginator = client.get_paginator('get_query_results')
query_results = paginator.paginate(
QueryExecutionId = queryExecutionId,
PaginationConfig = {'PageSize': 1000}
)
elif status == 'FAILED':
print('Query Failed!')
elif status == 'CANCELLED':
print('Query Cancelled!')
break
print(client.get_query_execution(QueryExecutionId = queryExecutionId))
results = []
rows = []
print('Processing Response')
in_cmd = """ insert into my_iceberg_table values ('aaaaa','bbb');"""
athena_query_to_dataframe('my'db,'my-bck/athena/tables/my_iceberg_table/',in_cmd)
...
最佳答案
这是权限问题... 因为这是一个 Iceberg 表,我还需要粘合表和架构的目录权限。 所以我添加了此 IAM 权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"glue:GetDatabase",
"glue:GetDatabases",
"glue:CreateDatabase",
"glue:UpdateTable",
"glue:GetTable"
],
"Resource": [
"arn:aws:glue:*:<account>:table/<schema>/<table>",
"arn:aws:glue:*:<account>:schema/AwsDataCatalog",
"arn:aws:glue:*:<account>:database/<schema>",
"arn:aws:glue:*:<account>:catalog"
]
}
]
}
关于python - ASW Athena boto3 冰山 table - 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73929159/