【问题标题】:What is the preferred way to load data from an API into BigQuery?将数据从 API 加载到 BigQuery 的首选方式是什么?
【发布时间】:2020-02-15 22:46:31
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否研究过以下内容...cloud.google.com/bigquery/… ...这对您不起作用吗?
  • 我不明白为什么这个问题已被关闭。它说“这个问题需要更加集中”。在阅读了文档之后,这个问题既没有“包含多个问题”,也没有“许多有效答案”。实际上,该问题非常关注特定问题,并且仅包含一个有效答案。您能否重新考虑重新提出问题?

标签: python api google-cloud-platform google-bigquery etl


【解决方案1】:

按照上面@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 documentation

为了准备 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)

【讨论】:

    【解决方案2】:

    根据documentation

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

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

    Avro

    CSV

    JSON(仅限换行符)

    兽人

    镶木地板

    数据存储导出

    Firestore 导出

    您应该知道limitations for each format。此外,加载作业也有限制,描述为here

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

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

    希望对你有帮助。

    【讨论】:

    • 虽然您只能使用 Cloud Storage 将数据“加载”到 BQ 中,但实际上您也可以将数据“流式传输”到 BQ 中:“除了使用作业将数据加载到 BigQuery 之外,您还可以选择将您的数据流式传输到 BigQuery”(cloud.google.com/bigquery/streaming-data-into-bigquery)
    猜你喜欢
    • 2019-09-18
    • 2013-06-02
    • 2010-09-05
    • 2021-04-13
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多