当前位置: 首页 > 后端技术 > Python

使用SQL获取bigquery比特币数据——使用GoogleBigQueryAPI处理比特币数据(二)

时间:2023-03-26 13:57:10 Python

之前写过一篇文章,主要总结(ban)了Kaggle入门kernal的代码:KaggleonKaggleDatasetontheBitcoinchain-使用GoogleBigQueryAPI处理比特币数据(一)但其实这个数据集相关的kernals并不多,很多想做的东西缺乏参考,需要自己摸索。这篇文章记录了我对大查询数据的探索。createaqueryobjectfromgoogle.cloudimportbigqueryclient=bigquery.Client()查询一段废话:好久没写SQL了。第一次写SQL是大一自学PHP,开发了一个统计我们专业期末成绩的网站。.结果最终版本的代码在Azure欠下之后就丢失了。后来上数据库原理的时候不喜欢老师,也没好好学习。后来用django都是orm,连sql都写了。后来去了中智实习,做了ETL。这是我第一次在实践中使用SQL,才意识到SQL有这么强大的能力。不过现在也算了。最简单的写法就是查询block0的所有信息,query="""SELECT*FROMbigquery-public-data.crypto_bitcoin.blockswherenumber=0"""r=client.query(query)看看QueryJob对象的方法和属性r:type(r),dir(r)(google.cloud.bigquery.job.QueryJob,['job_id','job_type','labels','location','path','query','query_parameters','referenced_tables','state','table_definitions','timeline','to_dataframe','total_bytes_billed','total_bytes_processed','user_email',])有很多,这里有一些可能的那些。看他们的值(这段代码是在kagglenotebook中输入的,所以不用打印就可以返回结果)r.state,r.job_id,r.labels,r.location,r.path,r.query,r.referenced_tables,r.state,r.timeline,r.total_bytes_billed,r.total_bytes_processed,r.user_email('DONE','ee67ed4d-80d4-4abf-bab4-522d33b52438',{},'US','/projects/kaggle-161607/jobs/ee67ed4d-80d4-4abf-bab4-522d33b52438','\nSELECT*FROM`bigquery-public-data.crypto_bitcoin.blocks`wherenumber=0\n',[TableReference(DatasetReference('bigquery-public-data','crypto_bitcoin'),'blocks')],'DONE',[],196083712,196019375,'data-proxy-public@kaggle-bq.iam.gserviceaccount.com')这些是一些状态信息,最重要的是数据:r.to_dataframe是一个返回pandas.core.frame.DataFrame对象的函数。df=r.to_dataframe()df.head()至此,就得到了比特币的原始数据。数据格式这里粗略分析下我们在bigquery中可以获得哪些比特币数据。一共有4张表:区块,输入,输出,交易数应该是这样的:到目前为止(2020年2月16日)比特币有超过61万个区块,交易数估计在6亿左右(通过下一篇文章看到这个数据集有5亿多笔交易),输入输出可能有10亿。但是他的数据不是最新的。所以没有那么多数据。这里的关键是交易表。transactions表一共17列hashTransactionhashStringsizeTransactionsize(bytes)Numericvirtual_size看来隔离见证交易的这个字段会和size不一样NumericversionprotocolversionNumericclock_time矿工最早可以把交易收录到默克尔树中的时间Numericblock_hash交易所属区块的哈希值Stringblock_number交易所属区块的编号Numericblock_timestamp区块时间戳Dateblock_timestamp_month出块时间月份Dateinput_count输入个数Numericoutput_count输出个数Numericinput_value输入值总和Numericoutput_value输出值总和Numericis_coinbase是否是铸造交易Booleanfee交易费用Numericinputs交易输出的输入数组TransactionOutputarray数组搜索第500,000个区块中的所有交易query="""SELECT*FROM`bigquery-public-data.crypto_bitcoin.transactions`whereblock_number=500000"""transactions_r=client.query(query)tx_df=transactions_r.to_dataframe()transactions_r.total_bytes_processed/(1024**3)这里显示:1076.8477526148781是否可以处理超过1T的通过查询一个区块的交易来获取数据?这有点奇怪。你可以使用fori,rowintx_df.iterrows():print(i,row['hash'],row['block_timestamp'])break来遍历数据帧对象。本系列下一篇:调试错误、查看表结构、交易输出数量分布——使用GoogleBigQueryAPI处理比特币数据(三)欢迎来到我的博客:https://codeplot.top/我的博客比特币分类:https://codeplot.top/tags/比特币/