Manejo de UINT256

En esta página, se proporciona información para controlar los tipos de datos UINT256 de la cadena de bloques en Blockchain Analytics.

Columnas sin pérdida

Blockchain Analytics no admite columnas NUMERIC de UINT256, pero algunos tipos de datos de cadenas de bloques tienen una precisión numérica de hasta UINT256.

Para conservar la precisión numérica, los conjuntos de datos de Blockchain Analytics presentan los valores de UINT256 en dos columnas separadas:

  • Es una columna NUMERIC de UINT128 con posible pérdida de precisión.
  • Es una columna de STRING que contiene el valor decimal completo en formato de cadena. Las columnas de cadena se marcan con el prefijo _lossless.

Funciones definidas por el usuario (UDF) en BigQuery

Google Cloud aloja una biblioteca de utilidades de análisis de blockchain que contiene UDF para controlar los cálculos y las agregaciones de UINT256. Las siguientes UDF son relevantes para el cálculo de 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

Consulta el repositorio de GitHub de UDF de BigQuery para obtener detalles sobre las UDF de BigQuery administradas por la comunidad.

Consulta la documentación de las UDF de BigQuery para obtener instrucciones sobre cómo usarlas.

Ejemplo sin pérdida con solución alternativa de UDF para UINT256

En la consola de Google Cloud , ve a la página BigQuery.

Ir a BigQuery

La siguiente consulta se carga en el 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