如何将 API 调用返回的数据直接加载到 BigQuery 中而不存储在 GCS 中?

Posted

技术标签:

【中文标题】如何将 API 调用返回的数据直接加载到 BigQuery 中而不存储在 GCS 中?【英文标题】:How to load data returned from API call directly into BigQuery without storing on GCS? 【发布时间】:2018-12-08 15:23:09 【问题描述】:

我正在尝试将 python 写入:

    从我们供应商的 API 中收集 josn 或 csv 数据,

    将数据加载到 BigQuery

问:我可以将数据直接加载到 BigQuery 而不存储在 GCS 上吗?

谢谢,

编辑: Client.load_table_from_dataframe 可能是一个解决方案。

【问题讨论】:

【参考方案1】:

几个想法:

使用 BigQuery 的 streaming API 将行插入表中。请注意,这会产生相关费用。 使用 INSERT 语句将要插入的值作为 query parameters 传递。您将使用以下形式的查询,将array_of_structs 作为ARRAY<STRUCT<x INT64, y STRING, z BOOL>> 类型的查询参数传递(该结构应具有您要使用的适当行类型)。请注意,调用 BigQuery 的最大请求大小限制是 10MB,如果我没记错的话。

查询:

INSERT dataset.table (x, y, z)
SELECT x, y, z
FROM UNNEST(@array_of_structs)

【讨论】:

谢谢!我可以使用 Apps Script 来做到这一点 - 1)将数据转换为 Blob 格式“application/octet-stream”2)并创建一个加载作业来直接加载数据。最相似的方法好像是load_table_from_dataframe? 好的,太好了!如果其他人正在寻找类似的解决方案,请考虑发布您所做的事情作为对您问题的回答。

以上是关于如何将 API 调用返回的数据直接加载到 BigQuery 中而不存储在 GCS 中?的主要内容,如果未能解决你的问题,请参考以下文章

在bigquery中以编程方式更新/插入数据

将 fetch 调用的返回数据映射到导致错误的状态

如何将 JSON 返回反序列化为从 RestSharp 调用到 API 的对象数组?

如何检查是不是从api返回数据?

jQuery AJAX API 交互。如何使用 html 视图处理数据输出?

在获取API调用之前重新启动加载屏幕