Как сравнивать большие числа статически? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть большая таблица адресов Эфириума, как это:

address,balance_in_wei
0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,37523023440555111
0xab7c74abc0c4d48d1bdad5dcb26153fc8780f83e,999999014703265377777771
0x61edcdf5bb737adffe5043706e7c5bb1f1a56eea,820999001231140000000001
0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae,44492
0x07ee55aa48bb72dcc6e9d78256648910de513eca,447526200567627140000001
0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5,428355780858540599597630
0x75ba02c5baf9cc3e9fe01c51df3cb1437e8690d4,335432763520825860248941
0x3bfc20f0b9afcace800d73d2191166ff16540258,306276272361399926202000
0x9a9bed3eb03e386d66f8a29dc67dc29bbb1ccb72,300001020000000000000000
0x059799f2261d37b829c2850cee67b5b975432271,300001000000000000000000

И я хочу только те, с балансом выше 0,3 Эфир, который составляет 30000000000000000000 Вэй

, поэтому я написал условие какэтот

WHERE balance_in_wei>30000000000000000000

, который выдал следующую ошибку:

Error: Query error: Invalid integer literal: 30000000000000000000

Поскольку попытка объявить статическую переменную для такого значения делает то же самое, как я могу выполнить такое сравнение?

1 Ответ

1 голос
/ 24 октября 2019

Обратите внимание: balance_in_wei должен иметь тип данных NUMERIC Если каким-то образом это INT64 в вашей таблице - он не будет работать

Так что, если вы используете правильный тип данных, в предложении whereбудет работать как есть - и размер вашей таблицы не имеет ничего общего с этой ошибкой!

Ниже приведена только демонстрация и имитация выбранных вами данных, а также предложение WHERE

#standardSQL
WITH `project.dataset.table` AS (
  SELECT CAST(NULL AS STRING) address, CAST(NULL AS NUMERIC) balance_in_wei UNION ALL
  SELECT '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', 37523023440555111 UNION ALL
  SELECT '0xab7c74abc0c4d48d1bdad5dcb26153fc8780f83e', 999999014703265377777771.0 UNION ALL
  SELECT '0x61edcdf5bb737adffe5043706e7c5bb1f1a56eea', 820999001231140000000001.0 UNION ALL
  SELECT '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', 44492 UNION ALL
  SELECT '0x07ee55aa48bb72dcc6e9d78256648910de513eca', 447526200567627140000001.0 UNION ALL
  SELECT '0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5', 428355780858540599597630.0 UNION ALL
  SELECT '0x75ba02c5baf9cc3e9fe01c51df3cb1437e8690d4', 335432763520825860248941.0 UNION ALL
  SELECT '0x3bfc20f0b9afcace800d73d2191166ff16540258', 306276272361399926202000.0 UNION ALL
  SELECT '0x9a9bed3eb03e386d66f8a29dc67dc29bbb1ccb72', 300001020000000000000000.0 UNION ALL
  SELECT '0x059799f2261d37b829c2850cee67b5b975432271', 300001000000000000000000.0 
)
SELECT *
FROM `project.dataset.table`
WHERE balance_in_wei > 400001000000000000000000.0 

с выводом

enter image description here

...