如何在第三方 API 中发出请求并在 google BigQuery 上定期加载结果?我应该使用哪些谷歌服务?
Posted
技术标签:
【中文标题】如何在第三方 API 中发出请求并在 google BigQuery 上定期加载结果?我应该使用哪些谷歌服务?【英文标题】:How to make requests in third party APIs and load the results periodically on google BigQuery? What google services should I use? 【发布时间】:2019-08-23 18:26:08 【问题描述】:我需要从第三方 API 获取数据并将其提取到 Google BigQuery 中。也许,我需要通过谷歌服务来自动化这个过程来定期做。
我正在尝试使用 Cloud Functions,但它需要一个触发器。我还阅读了有关 App Engine 的信息,但我认为它不适合仅使用一种功能来发出拉取请求。
另一个疑问是:我需要将数据加载到云存储中还是可以直接将其加载到 BigQuery?我应该使用 Dataflow 并进行任何配置吗?
def upload_blob(bucket_name, request_url, destination_blob_name):
"""
Uploads a file to the bucket.
"""
storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
request_json = requests.get(request_url['url'])
print('File uploaded to .'.format(
bucket_name,
destination_blob_name))
def func_data(request_url):
BUCKET_NAME = 'dataprep-staging'
BLOB_NAME = 'any_name'
BLOB_STR = '"blob": "some json"'
upload_blob(BUCKET_NAME, request_url, BLOB_NAME)
return f'Success!'
我希望获得有关我应该用于创建此管道的架构(谷歌服务)的建议。例如,使用云函数(从 API 获取数据),然后使用服务“X”安排作业将数据输入到存储中,最后从存储中提取数据。
【问题讨论】:
【参考方案1】:你可以使用函数。创建一个http triggered function 并使用cloud scheduler 定期调用它。
对了,你也可以调用appengine或者cloud run的http端点。
关于存储,答案是否定的。如果 API 结果对于函数允许的内存来说不是太大,你 can write in /tmp
directory 和 load data to bigquery with this file。如果需要,您可以将函数大小调整为 2go
【讨论】:
谢谢@guilhaume!这就是我一直在寻找的答案。或许,云存储是暂存区,“原始”数据不应该集中在那里吗? 存储很便宜。最好的做法之一(如果你有现金的话)是保留所有东西,以防将来需要。您(也许)从未使用过的数据可以存储在冷线中,存储非常实惠。考虑压缩它们。因此,所有这些都是为了回答您:您可以(必须?)将所有数据保存在不同的阶段。原始的、中间的和最终的。存储是非结构化数据的理想场所。对于结构,请考虑 bigQuery(带分区!!)。仓储价格不变,90天后自动切换冷线,查询方便。 完美!谢谢。以上是关于如何在第三方 API 中发出请求并在 google BigQuery 上定期加载结果?我应该使用哪些谷歌服务?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google Apps 脚本中使用 UrlFetchApp 发出 Drive API 批处理请求
如何向 Google Site Search XML API 发出跨域浏览器请求?
可以向 Google Maps API 发出多少请求而不被禁止?
向 Google Play Android Developer API 发出 HTTP 发布请求
错误:使用 Fetch API 向第三方 API 发出 GET 请求时出现“TypeError:无法获取”
有啥方法可以从 google contact api v3 检索 account_id 以向 google people api 发出获取请求?