【问题标题】:Extracting JSON object from BigQuery Client in AWS Lambda using Python使用 Python 从 AWS Lambda 中的 BigQuery 客户端提取 JSON 对象
【发布时间】: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_STRING function 将每一行转换为 JSON 字符串。
  • 我试过了,但导出仍然是 BigQuery Row() 格式,即使里面的内容现在被格式化为 JSON 字符串。我要做的是将该行格式转换为 JSON。
  • 对,您仍然需要提取每个行对象的内容,但至少是 JSON 格式。

标签: json python-2.7 amazon-web-services google-bigquery aws-lambda


【解决方案1】:

试试这样

`

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])

`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2014-09-22
    相关资源
    最近更新 更多