我想使用Google BigQuery数据库查询比特币区块链中的记录子集。我去这里,单击view dataset
https://console.cloud.google.com/marketplace/details/bigquery-public-data/bitcoin-blockchain。然后,在左侧栏上,似乎您必须单击" BigQuery-Public-Data"的下拉列表,然后单击" Bitcoin_blockchain",然后单击" Transactions"。然后,在右侧,您必须单击"查询表"按钮。这是我发现选择表的唯一方法 - 仅复制和粘贴下面的命令不会重新创建错误。
基于按照上述说明出现的表,我注意到outputs
是record
类型。我想从记录内部仅查看一个string
。字符串称为 output_pubkey_base58
。
所以我阅读了文档,文档表示命令是:
SELECT outputs.output_pubkey_base58 FROM `bigquery-public-data.bitcoin_blockchain.transactions` LIMIT 1000;
我有一个错误:Cannot access value on Array<Struct<output_satoshis ...
..我尝试了outputs[0].output_pubkey_base58
,没有工作
令人讨厌的是,此问题的格式与第一个示例相同,在其中,他们从citiesLived
内部查询citiesLived.place
参数,以相同的命令进行查询。:https://cloud.google.com/bigquery/docs/legacy-nested-repeated
您需要将数组 unnest
到一个新变量中。
SELECT o.output_pubkey_base58
FROM
`bigquery-public-data.bitcoin_blockchain.transactions`,
UNNEST (outputs) as o
LIMIT
1000
感觉到这里的混乱是关于传统SQL和标准SQL的。UNNEST必须在标准SQL中使用,如文档中所述:https://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-legacy-sql-legacy-sql#differences_in_in_repeated_repeated_repeated_field_field_handling
选择嵌套重复的叶片场使用Legacy SQL,您可以将"点"点"点"到嵌套的重复字段中,而无需考虑重复发生的位置。在标准SQL中,试图将"点"点"变成嵌套重复的字段会导致错误。