UINT256 處理方式

本頁說明如何在 Blockchain Analytics 中處理區塊鏈 UINT256 資料型別。

無損資料欄

Blockchain Analytics 不支援 UINT256 NUMERIC 欄,但部分區塊鏈資料類型具有高達 UINT256 的數值精確度。

為保留數值精確度,Blockchain Analytics 資料集會將 UINT256 值顯示在兩個不同的資料欄中:

  • UINT128 NUMERIC 資料欄,精確度可能會降低。
  • STRING 資料欄,包含字串形式的完整十進位值。字串 資料欄會標示 _lossless 前置字串。

BigQuery 使用者定義函式 (UDF)

Google Cloud 託管的區塊鏈分析公用程式庫包含 UDF,可處理 UINT256 的運算和彙整作業。下列 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