このページでは、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_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 のドキュメントをご覧ください。
UINT256 の UDF ワークアラウンドを使用したロスレスの例
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