Gestione di UINT256

Questa pagina fornisce informazioni su come gestire i tipi di dati UINT256 della blockchain in Blockchain Analytics.

Colonne senza perdita di dati

Blockchain Analytics non supporta le colonne NUMERICHE UINT256, ma alcuni tipi di dati della blockchain hanno una precisione numerica fino a UINT256.

Per preservare la precisione numerica, i set di dati di Blockchain Analytics presentano i valori UINT256 in due colonne separate:

  • Una colonna NUMERICA UINT128 con una potenziale perdita di precisione.
  • Una colonna STRING contenente il valore decimale completo in formato stringa. Le colonne di stringhe sono contrassegnate con il prefisso _lossless.

Funzioni definite dall'utente (UDF) di BigQuery

Google Cloud ospita una libreria di utilità di Blockchain Analytics che contiene UDF per la gestione di calcoli e aggregazioni UINT256. Le seguenti UDF sono pertinenti per il calcolo 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

Per i dettagli sulle UDF di BigQuery gestite dalla community, consulta il repository GitHub delle UDF di BigQuery.

Per istruzioni sull'utilizzo delle UDF di BigQuery, consulta la documentazione delle UDF di BigQuery.

Esempio senza perdita di dati con soluzione alternativa UDF per UINT256

Nella Google Cloud console, vai alla pagina BigQuery.

Vai a BigQuery

La seguente query viene caricata nel campo Editor:

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