UINT256 の処理

このページでは、Blockchain Analytics でブロックチェーンの UINT256 データ型を処理する方法について説明します。

ロスレス列

Blockchain Analytics は UINT256 NUMERIC 列をサポートしていませんが、一部のブロックチェーン データ型では数値精度が UINT256 まであります。

数値の精度を維持するため、Blockchain Analytics データセットでは UINT256 値が 2 つの別々の列に表示されます。

  • 精度が低下する可能性のある UINT128 NUMERIC 列。
  • 文字列形式の完全な 10 進数値を含む文字列列。文字列型の列には _lossless 接頭辞が付いています。

BigQuery のユーザー定義関数(UDF)

Google Cloud は、UINT256 の計算と集計を処理する UDF を含む Blockchain Analytics ユーティリティ ライブラリをホストしています。次の 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 のドキュメントをご覧ください。

UINT256 の UDF ワークアラウンドを使用したロスレスの例

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