Nesta página, você encontra informações sobre como processar tipos de dados UINT256 de blockchain no Blockchain Analytics.
Colunas sem perda
O Blockchain Analytics não é compatível com colunas NUMERIC UINT256, mas alguns tipos de dados de blockchain têm precisão numérica até UINT256.
Para preservar a precisão numérica, os conjuntos de dados do Blockchain Analytics apresentam valores UINT256 em duas colunas separadas:
- Uma coluna NUMERIC UINT128 com possível perda de precisão.
- Uma coluna STRING que contém o valor decimal completo em formato de string. As colunas de string são marcadas com o prefixo
_lossless.
Funções definidas pelo usuário (UDF) do BigQuery
O Google Cloud hospeda uma biblioteca de utilitários de análise de blockchain que contém UDF para processar cálculos e agregações de UINT256. As UDFs a seguir são relevantes para a computação de UINT256.
bqutil.fn.bignumber_addbqutil.fn.bignumber_subbqutil.fn.bignumber_mulbqutil.fn.bignumber_divbqutil.fn.bignumber_sumbqutil.fn.bignumber_avg
Consulte o repositório do GitHub de UDFs do BigQuery para detalhes sobre UDFs do BigQuery gerenciadas pela comunidade.
Consulte a documentação de UDFs do BigQuery para instruções sobre como usar essas funções.
Exemplo sem perda com solução alternativa de UDF para UINT256
No console do Google Cloud , acesse a página BigQuery.
A seguinte consulta é carregada no 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