使用 Cloud 功能将 TXT 文件转换为 CSV 并在 Google BigQuery 中填充数据
Posted
技术标签:
【中文标题】使用 Cloud 功能将 TXT 文件转换为 CSV 并在 Google BigQuery 中填充数据【英文标题】:Convert TXT file into CSV with Cloud function and populate data in Google BigQuery 【发布时间】:2021-02-23 02:29:23 【问题描述】:我正在尝试转换 txt。文件转换成 csv。并通过 Google Cloud 函数使用所有数据填充 BigQuery 表。
TXT 文件看起来与 CSV 文件非常相似,如下所示。整个文件重量约为 35Go,行数超过 350k。
[![在此处输入图片描述][1]][1]
我尝试应用上面共享的 python 脚本,但它不起作用...我的函数运行正常,但它没有向 BigQuery 填充任何数据。
我关注了这个*** tread。
我的 main.py 函数:
import pandas as pd
from google.cloud import bigquery
def txt_to_csv(event, context):
fileName = "gs://Bucket_name/file.txt"
bigqueryClient = bigquery.Client("project-name")
tableRef = bigqueryClient.dataset("Dataset").table("07_02_2021")
dataFrame = pd.read_csv(fileName, sep=",")
bigqueryJob = bigqueryClient.load_table_from_dataframe(dataFrame, tableRef)
bigqueryJob.result()
我的 requirements.txt 文件:
google-api-core==1.16.0
google-api-python-client==1.8.0
google-auth==1.12.0
google-auth-httplib2==0.0.3
google-cloud-bigquery==1.24.0
google-cloud-core==1.3.0
google-cloud-storage==1.26.0
google-resumable-media==0.5.0
googleapis-common-protos==1.51.0
pandas==1.0.3
pyarrow
有人可以帮助我吗?我觉得我错过了让它正常工作的步骤......比如我的桌子可能是creating a specific dataframe/schema?或者我应该load a pandas dataframe to a table 还是错误的方式?
【问题讨论】:
您不是在“将 txt 文件转换为 csv”,而是在告诉 pandas 您的 txt 文件是 csv。您的文件实际上是 CSV 格式吗? 嗨 @TimRoberts 我在 GCStorage 中的文件是 TXT 文件,我想将其转换为 CSV。我认为“pandas.read_csv”是一个有效的功能,不是吗?你会推荐什么?谢谢! 我们不可能知道,因为您没有分享关于 UserData.txt 实际包含的内容。给我们看几行,我们会给你建议。 @TimRoberts 我已经用 TXT 文件的屏幕截图更新了我的问题。 这是一个 CSV 文件。熊猫应该能够阅读它。您是否已经为您的 bigquery 表创建了架构?您确定它与 CSV 中的列匹配吗? 【参考方案1】:我成功地使用您的代码从 Cloud Storage 存储桶中的文件填充数据:
import pandas as pd
from google.cloud import bigquery
def txt_to_csv(event, context):
fileName = "gs://Bucket_NAME/File.txt"
bigqueryClient = bigquery.Client("PROJECT_ID")
tableRef = bigqueryClient.dataset("DATASET_NAME").table("TABLE_NAME")
dataFrame = pd.read_csv(fileName, sep=",")
bigqueryJob = bigqueryClient.load_table_from_dataframe(dataFrame, tableRef)
bigqueryJob.result()
我遵循了接下来的步骤:
1) 我使用了一个包含以下数据的 .txt 文件:
full_name,birth_year
"Lea",1996
"Jose",1995
"John",1997
"Berta",2001
"Marta",2005
2) 我在 BigQuery 中创建了一个包含以下字段的表:
全名作为字符串 birth_year 为整数3) 我使用您提供的 requirements.txt 部署了 Cloud Function,它部署成功但是当我测试 Cloud Function 时 "By going to your Cloud Function --> Testing Tab and click on **Test the Function **button
",我收到以下错误:
Missing optional dependency 'gcsfs'. The gcsfs library is required
to handle GCS files Use pip or conda to install gcsfs.
为缓解此问题,我将 gcsfs 库添加到 Cloud Functions requirements.txt 文件中:
google-api-core==1.16.0
google-api-python-client==1.8.0
google-auth==1.12.0
google-auth-httplib2==0.0.3
google-cloud-bigquery==1.24.0
google-cloud-core==1.3.0
google-cloud-storage==1.26.0
google-resumable-media==0.5.0
googleapis-common-protos==1.51.0
pandas==1.0.3
pyarrow
gcsfs==0.7.2
4)我再次部署该功能并进行了测试。这次该函数将数据正确添加到 BigQuery 表中。
解决方案
因此请注意:部署 Cloud Function 不会将数据填充到 BigQuery 中,您需要对其进行测试。
另一方面,您有一个字段为字符串类型的表格,但在 .txt 文件中,您有整数、时间戳等类型的数据。如果您只是想测试,那么您可以将所有数据放入您的 .txt 文件中。 txt 文件作为字符串或根据文件中的数据类型更改 BigQuery 表的字段类型。
【讨论】:
非常感谢我没能早点回答!是的,实际上我遇到的问题与 txt 文件有关,该文件包含许多错误的格式数据...以上是关于使用 Cloud 功能将 TXT 文件转换为 CSV 并在 Google BigQuery 中填充数据的主要内容,如果未能解决你的问题,请参考以下文章