首页 > 解决方案 > 将时间戳列添加到 Node.js Google Cloud 函数中的文件

问题描述

现在我正在使用 node.js 中的以下行将 Google Cloud Storage 上的文件复制到 Bigquery:

const bigquery = new BigQuery();
bigquery.dataset(xx).table(xx).load(storage.bucket(bucketName).file(fileName));

但现在我想在这个文件中添加一个新的时间戳列。那么我该怎么做呢?

所以我能想到两个问题:首先将这个文件读入一些数据结构,如数组:

array = FunctionToReadFileNameToArray(FileName); 

我们有这样的功能吗?假设我们有,那么很容易操作数组来添加时间戳列。

其次,将新的数组数据加载到 bigquery 中。但我只找到一种插入流数据的方法:

bigquery.dataset(xx).table(xx).insert(rows);

这里的行是不同的数据结构,如字典/地图,但不是数组。那么我们如何将数组加载到 bigquery 中呢?

谢谢

标签: node.jsgoogle-bigquerygoogle-cloud-functionsgoogle-cloud-storage

解决方案


我将假设您有一个结构化记录(JSON、XML、CSV)的文件(对象)。第一个任务似乎是打开该 GCS 对象进行读取。然后,您将一次读取一条记录。然后,您将使用所需的额外列(时间戳)扩充该记录,然后调用insert() API。此 API 可以使用要插入的单个对象或对象数组。

但是...如果这是一次性事件或可以批量执行...您可能会发现读取 GCS 对象并写入包含所需数据的新 GCS 对象然后将数据作为单元。查看 BQ 的定价,我们似乎发现流式插入的费用为每 200MB 0.01 美元,此外还有存储成本,GCS 对象负载作为一个单元将被绕过。我自己的想法是,为了节省几分钱而做额外的工作是对时间/金钱的浪费,但如果你要在几个月内处理 TB 的数据,它可能会加起来。


推荐阅读