将数据从 API 加载到 BigQuery 的首选方式是什么?

问题描述 投票:0回答:2

我正在尝试将数据从 REST API 获取到 Google Cloud Platform (GCP) 上的 BigQuery 中。实现这一目标的最佳方法是什么(不使用任何第三方工具,例如 Funnel.io 或 Supermetrics)?

我能找到的大多数教程都建议将数据作为 CSV 文件写入 Cloud Storage,然后使用 DataFlow 将数据加载到 BigQuery 中。然而,这似乎有点麻烦,特别是对于较小的文件。应该有一种方法可以做到这一点,而无需写入 CSV 的中间步骤。这可以实现吗(在 GCP 内)?如果可以,最好的方法是什么?

PS:如果数据大小与答案相关:我正在尝试加载总共约 10,000 行数据(一次性),每天约有 100 个新列进来 - 理想情况下每小时更新一次。

python api google-cloud-platform google-bigquery etl
2个回答
2
投票

按照上面 @Kolban 的提示,通过将数据“流式传输”到 BigQuery 中,可以在不使用第三方工具且无需将中间文件写入 Google Cloud Storage 的情况下将数据从 API 加载到 BigQuery 中:

rows_to_insert = [(u"Phred Phlyntstone", 32), (u"Wylma Phlyntstone", 29)]

errors = client.insert_rows(table, rows_to_insert)  # Make an API request.
if errors == []:
    print("New rows have been added.")

(来自 BQ 文档

为了准备 JSON 数据,必须将其转换为元组。以下是实现此目的的代码摘录:

# Turn JSON into tuples
data_tuples = []
for key,value in resp_json[product_id].items():
    data_tuples.append((
        value["product_id"],
        value["downloads"]
        )
    )

# Insert into BQ
errors = client.insert_rows(table, data_tuples)
if errors == []:
    print("New rows have been added.")
else:
    print(errors)

-1
投票

根据文档

目前,您只能从 Cloud Storage 或 可读的数据源(例如您的本地计算机)。

因此,除非您要加载 Datastore 或 Firestore 导出,否则文件必须位于 Google Cloud Storage 中。 GCS 有以下可用的可读格式:

阿夫罗

CSV

JSON(仅换行符分隔)

兽人

镶木地板

数据存储导出

Firestore 导出

您应该了解每种格式的限制。此外,加载作业也有限制,描述如下here

我建议您以一种可读格式从 Rest API 获取数据,将其存储在 Google Cloud Storage 中,然后使用 Google Transfer Service 将其加载到 BigQuery 中。因此,没有必要使用 DataFlow。

Cloud Storage Transfer 用于安排将重复数据直接加载到 BigQuery 中。根据文档,最小加载间隔为 1 小时,我相信这适合您的需求。您可以在此处阅读有关此服务的更多信息。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.