繁体   English   中英

在 aws 中通过 lambda 运行 python 脚本时,s3 存储桶中的文件没有值

[英]File in s3 bucket comes with no values when running python script through lambda in aws

我有以下脚本,但是当文件进入 s3 时它变为空白。

import json
import urllib.parse
from datetime import datetime
import boto3
import botocore.session as bc

print('Loading function')
client_s3=boto3.client('s3')

def run_athena(BUCKET_NAME, PREFIX):
    client=boto3.client('athena')
    database = 'data_lake'
    query ="SELECT buid, property_id, checkin_date, count(*) number_of_direct_bookings FROM data_lake.vw_qs_bookings_v1 where source_logic in ('sources_phone', 'sources_email', 'sources_website','sources_front_desk') and cancelled_flag=0 and checkin_date= date_add('day', -1, current_date) group by 1,2,3";
    s3_output = 's3://gainsight-file/gainsight/'
    response = client.start_query_execution(QueryString=query, QueryExecutionContext={'Database': database}, ResultConfiguration={'OutputLocation': s3_output})
   
  
    today = datetime.today().strftime('%Y-%m-%d')

    response_s3 = client_s3.list_objects(
        Bucket=BUCKET_NAME,
        Prefix=PREFIX,
    )
    name = response_s3["Contents"][0]["Key"]
    client_s3.copy_object(Bucket=BUCKET_NAME, CopySource=BUCKET_NAME+'/'+name, Key=PREFIX+"vw_qs_bookings_v1_"+today)
    client_s3.delete_object(Bucket=BUCKET_NAME, Key=name)
    

def lambda_handler(event, context):
    print("Entered lambda_handler")
    run_athena('gainsight-file', 'gainsight/')

我假设与查询变量有关。

谢谢您的帮助。

client.start_query_execution(…)启动查询执行,它不会等待它完成(因为这可能长达 30 分钟)。 您需要调用client.get_query_execution(…)直到您收到说明执行成功(或失败)的响应。 只有这样 output 才可用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM