Как сохранить числовой тип в BigQuery, используя узел js client для потоковой вставки? - PullRequest
0 голосов
/ 24 января 2019

Учитывая, что числовой тип в BigQuery поддерживает ограничения, выходящие за рамки числового типа Javascript, как мне сохранить числовой тип, используя метод узла js client Table.insert(rows, options, callback)?Для обработки больших чисел с использованием строкового типа я подумывал об использовании https://github.com/MikeMcl/big.js. Если я отправлю строковое значение (содержащее действительное число, превышающее ограничение числа javascript) для числового поля в моей таблице BigQuery, это будет работать?

1 Ответ

0 голосов
/ 24 января 2019

Вы должны рассматривать числа, которые слишком велики для 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, я также пытался BigInt(Number.MAX_SAFE_INTEGER) в NodeJS, но библиотека не будет правильно отправлять ее в BigQuery- если я сначала не преобразовал его в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...