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_addbqutil.fn.bignumber_subbqutil.fn.bignumber_mulbqutil.fn.bignumber_divbqutil.fn.bignumber_sumbqutil.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.
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