我正在尝试将数据从REST API导入Google Cloud Platform(GCP)上的BigQuery中。最好的方法是什么(不使用任何第三方工具,例如Funnel.io或Supermetrics)?
我可以找到的大多数教程都建议将数据作为CSV文件写入Cloud Storage,然后使用DataFlow将数据加载到BigQuery中。但是,这似乎有点麻烦。应该有一种方法,而无需中间步骤即可写入CSV。可以在GCP内实现吗?如果可以,最好的方法是什么?
PS:如果数据大小与答案有关:我正在尝试加载总计约10,000行的数据(一次),每天要添加约100个新列-理想情况下每小时更新一次。
答案 0 :(得分:0)
当前,您只能从Cloud Storage或 可读的数据源(例如本地计算机)。
因此,除非您正在加载数据存储或Firestore导出,否则文件必须位于Google Cloud Storage中。 GCS有以下可用的可读格式:
Avro
CSV
JSON(仅限换行符分隔)
ORC
实木复合地板
数据存储区导出
Firestore出口
您应该注意limitations for each format。此外,加载作业也有局限性,它们在here中进行了描述。
我建议您以一种可读格式从Rest API中获取数据,将其存储在Google Cloud Storage中,然后使用Google Transfer Service将其加载到BigQuery中。因此,不必使用DataFlow。
Cloud Storage Transfer用于安排定期将数据直接加载到BigQuery中。根据文档,最小加载间隔为1小时,我相信这符合您的需求。您可以阅读有关此服务here的更多信息。
我希望这会有所帮助。
答案 1 :(得分:0)
按照上述@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)