如何使用节点 js 客户端在 BigQuery 中存储数字类型以进行流式插入?
Posted
技术标签:
【中文标题】如何使用节点 js 客户端在 BigQuery 中存储数字类型以进行流式插入?【英文标题】:How to store numeric type in BigQuery using node js client for streaming insert? 【发布时间】:2019-01-24 04:38:41 【问题描述】:鉴于 BigQuery 中的数字类型支持超出 javascript 数字类型的限制,如何使用节点 js 客户端 Table.insert(rows, options, callback)
方法存储数字类型?对于使用字符串类型处理大数字,我正在考虑使用https://github.com/MikeMcl/big.js。如果我为 BigQuery 表中的数字字段发送字符串值(包含超出 javascript 数量限制的有效数字),它会起作用吗?
【问题讨论】:
【参考方案1】:您需要将对于 JavaScript 来说太大的数字视为字符串。
比如JS不知道怎么处理-99999999999999999999999999999.999999999
:
同时,这段代码在 NodeJS 中工作,将这个巨大的数字插入 BigQuery:
BigQuery = require('@google-cloud/bigquery');
bigquery = BigQuery(projectId: 'my-project');
dataset = bigquery.dataset('tt');
table = dataset.table('testfun_numeric');
rows = [
name:"whatever",
numi: "-99999999999999999999999999999.999999999"
];
table.insert(rows);
在 BigQuery 中:
SELECT name, numi
, numi=numi+1000 better_comparison
FROM `fh-bigquery.tt.testfun_numeric`
我之前在 BigQuery 中使用
CREATE TABLE `tt.testfun_numeric`
AS
SELECT '' name, CAST(0 AS NUMERIC) numi
LIMIT 0
FWIW,我也在 NodeJS 中尝试了 BigInt(Number.MAX_SAFE_INTEGER)
,但库无法将其正确发送到 BigQuery - 除非我先将其转换为字符串。
【讨论】:
以上是关于如何使用节点 js 客户端在 BigQuery 中存储数字类型以进行流式插入?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 node.js 客户端库计算完成的 BigQuery 作业的行数
如何安全地为 bigquery 节点插入转义用户输入?可以在 bigquery.insert 节点库上使用参数化查询吗?
如何在客户端上保存 JWT 令牌,在节点中使用 Hapi js。?