本页介绍了如何在 Blockchain Analytics 中处理区块链 UINT256 数据类型。
无损列
Blockchain Analytics 不支持 UINT256 NUMERIC 列,但某些区块链数据类型的数值精度高达 UINT256。
为了保持数值精度,Blockchain Analytics 数据集将 UINT256 值显示在两个单独的列中:
- 可能损失精度的 UINT128 NUMERIC 列。
- 一个 STRING 列,包含字符串形式的完整小数值。字符串列带有
_lossless前缀。
BigQuery 用户定义的函数 (UDF)
Google Cloud 托管了一个区块链分析实用程序库,其中包含用于处理 UINT256 计算和聚合的 UDF。以下 UDF 与 UINT256 计算相关。
bqutil.fn.bignumber_addbqutil.fn.bignumber_subbqutil.fn.bignumber_mulbqutil.fn.bignumber_divbqutil.fn.bignumber_sumbqutil.fn.bignumber_avg
如需详细了解社区管理的 BigQuery UDF,请参阅 BigQuery UDF GitHub 代码库。
如需了解有关使用 BigQuery UDF 的说明,请参阅 BigQuery UDF 文档。
使用 UDF 解决 UINT256 问题的无损示例
在 Google Cloud 控制台中,前往 BigQuery 页面。
以下查询已加载到编辑器字段中:
WITH withdrawals AS (
SELECT
w.amount_lossless AS amount,
DATE(b.block_timestamp) AS block_date
FROM
bigquery-public-data.blockchain_analytics_ethereum_mainnet_us.blocks AS b
CROSS JOIN UNNEST(withdrawals) AS w
)
SELECT
block_date,
bqutil.fn.bignumber_div(bqutil.fn.bignumber_sum(ARRAY_AGG(amount)), "1000000000") AS eth_withdrawn
FROM
withdrawals
GROUP BY 1 ORDER BY 1 DESC