【发布时间】:2020-07-31 06:28:37
【问题描述】:
我有一组文本文件,每 5 分钟上传一次到谷歌云存储中。我想每 5 分钟将它们放入 BigQuery(因为文本文件每 5 分钟上传到 Cloud Storage)。我知道无法将文本文件上传到 BigQuery。最好的方法是什么?
提前致谢。
【问题讨论】:
标签: google-bigquery google-cloud-storage text-files
我有一组文本文件,每 5 分钟上传一次到谷歌云存储中。我想每 5 分钟将它们放入 BigQuery(因为文本文件每 5 分钟上传到 Cloud Storage)。我知道无法将文本文件上传到 BigQuery。最好的方法是什么?
提前致谢。
【问题讨论】:
标签: google-bigquery google-cloud-storage text-files
他是另一种方法,它将使用基于事件的Cloud Function 将数据加载到 BigQuery 中。创建一个以"Trigger Type" 为云存储的云函数。一旦文件/文件加载到云存储桶中,它将调用/触发云函数事件,并将云存储中的数据加载到 BigQuery 中。
import pandas as pd
from google.cloud import bigquery
def bqDataLoad(event, context):
bucketName = event['bucket']
blobName = event['name']
fileName = "gs://" + bucketName + "/" + blobName
bigqueryClient = bigquery.Client()
tableRef = bigqueryClient.dataset("bq-dataset-name").table("bq-table-name")
dataFrame = pd.read_csv(fileName)
bigqueryJob = bigqueryClient.load_table_from_dataframe(dataFrame, tableRef)
bigqueryJob.result()
【讨论】:
dataFrame = pd.read_csv(fileName, sep="|")
"file.txt", sep="|")
您可以利用BigQuery transfers。
目前,此服务每小时传输新添加的文件,1h minimum file age limitation 即将发送到be removed。
该服务检查是否存在自上传到存储桶中超过 1 小时的新文件,例如:
对于第 2 步,您需要将文本文件处理为 be accepted by BigQuery。我认为最简单的方法是使用 .csv 文件。 按如下方式编辑您的 .txt 文件:
您还需要确保以下几点:
对于第 3 步,请在下面找到建议的 transfer configurations:
自定义 --> 每 1 小时
你的存储桶/你的文件夹/文本*
传输将提取所有以名称文本开头的文件
追加
CSV
对于第 5 步,如果传输成功,则每小时verify in the Transfer details page。如果出现错误,则不会传输整批文件。使用CLI(请参阅下面的命令)获取有关哪个文件有问题以及错误性质的信息。您需要从存储桶中删除相应的文件,更正并重新上传。
bq --format=prettyjson show -j [bqts_...]
也可以preview your BigQuery table查看您传输的文本。
【讨论】:
这是迄今为止尚未建议的替代选项:可以在 pandas 中打开 txt 文件(例如在 GCP AI Notebooks 中),然后使用 pandas 函数pandas.DataFrame.to_gbq 上传它。这非常简单,并在此处详细描述。如果要追加,我发现这是最佳解决方案,因为没有必要描述架构。
【讨论】: