Gestion de UINT256

Cette page explique comment gérer les types de données UINT256 de la blockchain dans Blockchain Analytics.

Colonnes sans perte

Blockchain Analytics n'est pas compatible avec les colonnes NUMERIC UINT256, mais certains types de données de blockchain ont une précision numérique allant jusqu'à UINT256.

Pour préserver la précision numérique, les ensembles de données Blockchain Analytics présentent les valeurs UINT256 dans deux colonnes distinctes :

  • Colonne NUMERIC UINT128 avec une perte de précision potentielle.
  • Colonne STRING contenant la valeur décimale complète sous forme de chaîne. Les colonnes de chaîne sont marquées avec le préfixe _lossless.

Fonctions BigQuery définies par l'utilisateur (UDF)

Google Cloud héberge une bibliothèque utilitaire Blockchain Analytics qui contient des UDF pour gérer les calculs et les agrégations UINT256. Les UDF suivantes sont pertinentes pour le calcul 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

Consultez le dépôt GitHub des UDF BigQuery pour en savoir plus sur les UDF BigQuery gérées par la communauté.

Consultez la documentation sur les UDF BigQuery pour obtenir des instructions sur l'utilisation des UDF BigQuery.

Exemple sans perte avec solution de contournement de fonction UDF;utilisateur pour UINT256

Dans la console Google Cloud , accédez à la page BigQuery.

Accéder à BigQuery

La requête suivante est chargée dans le champ Éditeur :

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