node.js - 将时间戳列添加到 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 中呢?
谢谢
解决方案
我将假设您有一个结构化记录(JSON、XML、CSV)的文件(对象)。第一个任务似乎是打开该 GCS 对象进行读取。然后,您将一次读取一条记录。然后,您将使用所需的额外列(时间戳)扩充该记录,然后调用insert() API。此 API 可以使用要插入的单个对象或对象数组。
但是...如果这是一次性事件或可以批量执行...您可能会发现读取 GCS 对象并写入包含所需数据的新 GCS 对象然后将数据作为单元。查看 BQ 的定价,我们似乎发现流式插入的费用为每 200MB 0.01 美元,此外还有存储成本,GCS 对象负载作为一个单元将被绕过。我自己的想法是,为了节省几分钱而做额外的工作是对时间/金钱的浪费,但如果你要在几个月内处理 TB 的数据,它可能会加起来。
推荐阅读
- javascript - 数据触发器与 fancybox 冲突
- php - 提供的参数之一不可接受使用 Microsoft Graph API 创建文件夹
- php - PHP在csv的每个值的两端添加引号
- jquery - 从 currencyconverterapi 获取内容
- spring - Couchbase 使用 Spring 修改元数据体验
- reactjs - Heroku 部署:主路由不再工作(在 localhost 工作)
- android - Android 数据绑定 - 如何为 ImageView 设置 contentDescription 和 src
- java - 一个运行的 JVM 中有两个信任库,这可能吗?如果是,那怎么办?
- php - 没有得到 $_POST 数据
- unicode - CLDR 正确的 unicode 给了我错误的符号