如何使用Node JS客户端在BigQuery中存储数字类型以进行流插入?

时间:2019-01-24 04:38:41

标签: google-bigquery

鉴于BigQuery中的数字类型支持的限制方式超出了Javascript的数字类型,我该如何使用Node JS客户端Table.insert(rows, options, callback)方法存储数字类型?为了使用字符串类型处理大数字,我正在考虑使用https://github.com/MikeMcl/big.js。如果我为BigQuery表中的数字字段发送了一个字符串值(包含超出javascript的数字限制的有效数字),它将起作用吗?

1 个答案:

答案 0 :(得分:3)

您需要将JavaScript太大的数字视为字符串。

例如,JS不知道如何处理-99999999999999999999999999999.999999999

enter image description here

与此同时,这段代码可在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` 

enter image description here

我以前在BigQuery中使用

创建了表格
CREATE TABLE `tt.testfun_numeric`
AS
SELECT '' name, CAST(0 AS NUMERIC) numi 
LIMIT 0

FWIW,我也在NodeJS中尝试过BigInt(Number.MAX_SAFE_INTEGER),但是该库无法将其正确发送到BigQuery-除非先将其转换为字符串。