Auf dieser Seite finden Sie Informationen zum Umgang mit UINT256-Datentypen in Blockchain Analytics.
Verlustfreie Spalten
Blockchain Analytics unterstützt keine NUMERIC-Spalten vom Typ UINT256, aber einige Blockchain-Datentypen haben eine numerische Genauigkeit von bis zu UINT256.
Um die numerische Genauigkeit beizubehalten, werden UINT256-Werte in Blockchain Analytics-Datasets in zwei separaten Spalten dargestellt:
- Eine NUMERIC-Spalte vom Typ UINT128 mit potenziellem Genauigkeitsverlust.
- Eine STRING-Spalte, die den vollständigen Dezimalwert in Stringform enthält. Die Stringspalten sind mit dem Präfix
_losslessgekennzeichnet.
Benutzerdefinierte Funktionen (User-Defined Functions, UDFs) in BigQuery
Google Cloud hostet eine Blockchain Analytics-Hilfsbibliothek, die benutzerdefinierte Funktionen für die Verarbeitung von UINT256-Berechnungen und ‑Aggregationen enthält. Die folgenden UDFs sind für die UINT256-Berechnung relevant.
bqutil.fn.bignumber_addbqutil.fn.bignumber_subbqutil.fn.bignumber_mulbqutil.fn.bignumber_divbqutil.fn.bignumber_sumbqutil.fn.bignumber_avg
Weitere Informationen zu von der Community verwalteten BigQuery-UDFs finden Sie im GitHub-Repository für BigQuery-UDFs.
Eine Anleitung zur Verwendung von BigQuery-UDFs finden Sie in der BigQuery-UDF-Dokumentation.
Verlustfreies Beispiel mit UDF-Problemumgehung für UINT256
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Die folgende Abfrage wird in das Feld Editor geladen:
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