如何使用 Cloud Run & BigQuery 进行库存管理

2022-04-02 00:00:00 代码 更新 文件 库存 转换为

很多人将 Cloud Run 作为一种网站托管的方式, Cloud Run 确实是托管的工具,但是我们可以利用 Cloud Run 做更多的事情,那么我们今天就来探索一下如何使用 Cloud Run & BigQuery 来创建一个库存管理系统。下面,我会使用爱荷华州酒类控制板数据集的一个子集为我们的虚拟商店创建一个较小的库存文件。

批量导入新库存

在这个库存管理方案中,我们将一个 CSV 文件放入 Cloud Stroage 中以批量加载新库存,您可以认为我们正在从可以导出 CSV 文件的旧库存管理系统迁移至新系统。

BigQuery 可以直接从 Cloud Storage 导入 CSV 文件,如果不需要进行任何数据转换,建议您使用内置的 CSV 加载功能。对于此次用例,只需要 CSV 中的几列,并且想要做一些其他的数据转换,所以将会编写一些代码。

为了简化代码的部署,我将 Python Functions Framework 用作脚本的外壳。为了访问 Cloud Storage和 BiqQuery,我为每个产品使用了 Python 客户端库,并且正在关注示例资源管理器中的示例。在撰写本文时,我只遇到了两个问题。

首先,如果可能的话,我不想使用本地文件系统来确保我的代码确实是无服务器的,因此我必须在内存中完全处理 CSV 文件的内容。其次,从 Cloud Storage 下载文件的示例将其保留为 Blab,而不是CSV 可以解析的内容。一些简单的命令可以将 Blob 转换为字节,然后将字节转换为 StringIO 对象可以解决该问题。

1 # Create necessary GCP Clients    
2     storage_client = storage.Client()    
3     bq_client = bigquery.Client()     
4        
5     # Retrieve starting inventory file from storage and parse    
6     bucket_name = "INSERT BUCKET NAME HERE"    
7     bucket = storage_client.bucket(bucket_name)  
8       
9     file_name = "INSERT FILE NAME HERE"     
10     blob = bucket.blob(file_name)    
11     
12     bytedata = blob.download_as_bytes()    
13     data = bytedata.decode("UTF-8")   
14      
15     csv_file_ish = StringIO(data)    
16     
17     inventory_reader = csv.DictReader(csv_file_ish)

相关文章