通过云函数从云存储中读取数据

Posted

技术标签:

【中文标题】通过云函数从云存储中读取数据【英文标题】:Reading Data From Cloud Storage Via Cloud Functions 【发布时间】:2019-04-20 04:22:18 【问题描述】:

我正在尝试快速验证在 Python 中构建数据处理管道的概念。为此,我想构建一个 Google 函数,当某些 .csv 文件被放入 Cloud Storage 时会触发该函数。

我跟着this Google Functions Python tutorial 进行操作,虽然示例代码确实会在删除文件时触发函数来创建一些简单的日志,但我真的被困在我必须进行什么调用才能实际读取数据的内容上。我尝试搜索 SDK/API 指导文档,但找不到。

如果这是相关的,一旦我处理了 .csv,我希望能够将我从中提取的一些数据添加到 GCP 的 Pub/Sub 中。

【问题讨论】:

你最终是否设法让它工作,我遇到了一些类似的问题,并不断遇到建议最好让云功能直接将数据发送到大查询,并且然后从那里拿走...谢谢 是的,我确实设法让它工作。我能够使用顶部评论读取数据的内容,然后使用 SDK 将数据放入 Pub/Sub。如果你能告诉我你的具体问题,我很乐意提供帮助:) 【参考方案1】:

这是使用pandas 的替代解决方案:

云功能码:

import pandas as pd

def GCSDataRead(event, context):
    bucketName = event['bucket']
    blobName = event['name']
    fileName = "gs://" + bucketName + "/" + blobName
    
    dataFrame = pd.read_csv(fileName, sep=",")
    print(dataFrame)

【讨论】:

【参考方案2】:

该函数实际上并不接收文件的内容,只是一些关于它的元数据。

您需要使用google-cloud-storage 客户端。有关详细信息,请参阅"Downloading Objects" 指南。

将它与您正在使用的教程放在一起,您将获得如下功能:

from google.cloud import storage

storage_client = storage.Client()

def hello_gcs_generic(data, context):
    bucket = storage_client.get_bucket(data['bucket'])
    blob = bucket.blob(data['name'])
    contents = blob.download_as_string()
    # Process the file contents, etc...

【讨论】:

以上是关于通过云函数从云存储中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 错误从云存储传输 csv

在 Android 中从云源存储和读取数据的最佳方法?

从本地计算机读取文件并使用谷歌数据流写入 BigQuery 或谷歌存储

从云功能中删除云存储中的文件

从云函数触发数据流管道时,无法从主类执行超过 1 个函数

Snowflake - 从云存储加载数据加载数据