UINT256 处理

本页介绍了如何在 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_add
  • bqutil.fn.bignumber_sub
  • bqutil.fn.bignumber_mul
  • bqutil.fn.bignumber_div
  • bqutil.fn.bignumber_sum
  • bqutil.fn.bignumber_avg

如需详细了解社区管理的 BigQuery UDF,请参阅 BigQuery UDF GitHub 代码库

如需了解有关使用 BigQuery UDF 的说明,请参阅 BigQuery UDF 文档

使用 UDF 解决 UINT256 问题的无损示例

在 Google Cloud 控制台中,前往 BigQuery 页面。

前往 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