使用Python从AWS Lambda中的BigQuery客户端提取JSON对象
我正在AWS lambda(Python 2.7运行时)中通过使用Python从AWS Lambda中的BigQuery客户端提取JSON对象,json,python-2.7,amazon-web-services,google-bigquery,aws-lambda,Json,Python 2.7,Amazon Web Services,Google Bigquery,Aws Lambda,我正在AWS lambda(Python 2.7运行时)中通过google.cloud.bigquery.Client.query包运行SQL查询。从查询中提取的本机BQ对象是BigQuery行(),即 行((u'exampleEmail@gmail.com“,u'XXX1234XXX'),{u'email':0,u'email_id':1}) 我需要将其转换为Json,即 [{'email_id':'XXX1234XXX','email':'exampleEmail@gmail.com“}]
google.cloud.bigquery.Client.query
包运行SQL查询。从查询中提取的本机BQ对象是BigQuery行()
,即
行((u'exampleEmail@gmail.com“,u'XXX1234XXX'),{u'email':0,u'email_id':1})
我需要将其转换为Json,即
[{'email_id':'XXX1234XXX','email':'exampleEmail@gmail.com“}]
在本地运行时,我可以调用行上的python Dict函数对其进行转换,即
queryJob = bigquery.Client.query(sql)
list=[]
for row in queryJob.result():
** at this point row = the BQ sample Row object shown above **
tmp = dict(row)
list.append(tmp)`
但当我将其加载到AWS Lambda时,它会抛出错误:
ValueError:字典更新序列元素#0的长度为22;2是必需的
我尝试过以不同的方式强制它,将它分成多个部分等,但无法将其转换为所需的JSON格式
我对将QueryJob转换成Pandas数据帧,然后再转换成JSON对象的兔子洞进行了简单的研究,JSON对象也在本地工作,但在AWS Lambda中遇到了numpy
包错误,这似乎是一个已知的问题
我觉得这应该有一个简单的解决方案,但只是还没有找到它 试着这样做
`
`我不知道这是否有帮助,但您可以使用查询本身的内部将每一行转换为JSON字符串。我尝试了这一点,但导出仍然是BigQuery row()格式,即使内部现在已格式化为JSON字符串。我要做的是将该行格式转换为JSON。对,您仍然需要提取每个行对象的内容,但至少是JSON格式。
L = []
sql = (#sql_statement)
query_job = client.query(sql) # API request
query_job.result()
for row in query_job:
email_id= row.get('email_id')
email= row.get('email')
L.append([email_id, email])