一、十六进制转十进制

1.V2的表里的数据,bnb.logs里的data(16进制)怎么转成正常的数字(转为10进制)?

转换前

Untitled

转换后

Untitled

可以用conv函数(具体用法可以搜‘ conv spark ’),使用示例

conv(substr(data,3,64),16,10)

2.16进制转10进制的时候用了conv()后依然报错,怎么解决?

可能是数据太大出现了数据溢出.有一个临时的解决方案,将大的hex数据拆分为多个部分分别转码

with cte as (
    select lpad('0000000000000000000000000000000000000000000000014d1120d7b1600000', 64, '0') as n,
    '4294967296' as exp0,
      -- 16^8,
    '72057594037927936' as exp1 -- 16^14,
  )

select

  CAST(conv(substring(n, 1, 14), 16, 10) AS STRING) * exp0 * exp1 * exp1 * exp1
  + CAST(conv(substring(n, 15, 14), 16, 10) AS STRING) * exp0 * exp1 * exp1
  + CAST(conv(substring(n, 29, 14), 16, 10) AS STRING) * exp0 * exp1
  + CAST(conv(substring(n, 43, 14), 16, 10) AS STRING) * exp0 + CAST(conv(substring(n, 57, 14), 16, 10) AS STRING)
from cte;

3.V1引擎(PostgreSQL)怎么16进制转10进制?

使用函数bytea2numeric()

二、V1 引擎与 V2引擎

1.同样是BNB Smart Chain 的数据bep20.xxx与bnb.xxx 这两个什么区别?

bep20.xxx是Dune V1版本的计算引擎用(PostgreSQL database) 是Dune V2版本的计算引擎(spark + databricks)