使用 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 中填充数据的主要内容,如果未能解决你的问题,请参考以下文章

matlab将txt格式转成wav格式

如何将TXT文件保存为HTML

用于 CS 的 MacVIM 语法文件

读取 txt 文件 JSON 数据以在 Cloud Pub Sub 中发布消息

TXT文件文字转语音有啥方法?

如何使用python将txt文件或PDF转换为Word doc?