UINT256-Verarbeitung

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 _lossless gekennzeichnet.

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_add
  • bqutil.fn.bignumber_sub
  • bqutil.fn.bignumber_mul
  • bqutil.fn.bignumber_div
  • bqutil.fn.bignumber_sum
  • bqutil.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.

BigQuery aufrufen

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