【发布时间】:2018-07-12 17:12:53
【问题描述】:
我正在通过 AWS lambda(Python 2.7 运行时)中的 google.cloud.bigquery.Client.query 包运行 SQL 查询。从查询中提取的本机 BQ 对象是 BigQuery Row(),即,
行((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 对象进行了简短的研究,该对象也可以在本地工作,但在 AWS Lambda 中遇到numpy 包错误,这似乎有点的一个已知问题。
我觉得这应该有一个简单的解决方案,但还没有找到。
【问题讨论】:
-
我不知道它是否有帮助,但您可以在查询本身内部使用the
TO_JSON_STRINGfunction 将每一行转换为 JSON 字符串。 -
我试过了,但导出仍然是 BigQuery Row() 格式,即使里面的内容现在被格式化为 JSON 字符串。我要做的是将该行格式转换为 JSON。
-
对,您仍然需要提取每个行对象的内容,但至少是 JSON 格式。
标签: json python-2.7 amazon-web-services google-bigquery aws-lambda