Проблема в том, что некоторые значения log.data
исключаются из SUM
, поскольку они не укладываются в диапазон INT64
и, следовательно, SAFE_CAST(log.data AS INT64)
возвращает NULL
.Например, 0x00000000000000000000000000000000000000000000000080b7978da47c78d2
больше, чем максимальное INT64
значение 9223372036854775807
, равное 0x7FFFFFFFFFFFFFFF
в шестнадцатеричном формате.
Вместо этого можно привести значения log.data
к типу FLOAT64
, который дает результат ближе к тому, что вы видите, используя Pandas:
SELECT
SUM(CAST(log.data as FLOAT64)/POW(10,18))
FROM
`bigquery-public-data.ethereum_blockchain.logs` AS log
WHERE TRUE
AND log.address = '0xf53ad2c6851052a81b42133467480961b2321c09'
AND log.block_timestamp >= '2018-01-01 00:00:01'
AND log.block_timestamp <= '2018-12-01 00:00:01'
AND SUBSTR(log.topics[SAFE_OFFSET(0)], 1, 10) IN ('0x42696c68','0xcc16f5db')
Это возвращает 329681.7942642243
.