如何在 Google BigQuery 的记录中查询字符串?文档不工作
Posted
技术标签:
【中文标题】如何在 Google BigQuery 的记录中查询字符串?文档不工作【英文标题】:How to query string inside a record in Google BigQuery? Docs not working 【发布时间】:2019-03-16 20:01:14 【问题描述】:我想使用 google bigquery 数据库查询比特币区块链中记录的子集。我去这里点击view dataset
https://console.cloud.google.com/marketplace/details/bigquery-public-data/bitcoin-blockchain。然后,在左侧边栏中,您似乎必须单击“bigquery-public-data”的下拉菜单,然后单击“bitcoin_blockchain”,然后单击“交易”。然后在右侧,您必须单击“查询表”按钮。这是我发现选择表格的唯一方法 - 只需复制和粘贴下面的命令不会重新创建错误。
根据上述说明出现的表格,我注意到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
【问题讨论】:
【参考方案1】:您需要将unnest
数组转换成一个新变量。
SELECT o.output_pubkey_base58
FROM
`bigquery-public-data.bitcoin_blockchain.transactions`,
UNNEST (outputs) as o
LIMIT
1000
【讨论】:
【参考方案2】:感到这里的混淆是关于旧版 SQL 和标准 SQL。 UNNEST 必须在标准 SQL 中使用,如文档中所述:https://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-legacy-sql#differences_in_repeated_field_handling
选择嵌套的重复叶字段 使用旧版 SQL,您可以“点”到嵌套的重复字段中,而无需考虑重复发生的位置。在标准 SQL 中,尝试在嵌套的重复字段中“点”会导致错误。
【讨论】:
以上是关于如何在 Google BigQuery 的记录中查询字符串?文档不工作的主要内容,如果未能解决你的问题,请参考以下文章
复制记录以填补 Google BigQuery 中日期之间的空白
如何同步调用 google-bigquery 删除和插入 API?
Python:如何使用 pandas 数据框更新(覆盖)Google BigQuery 表
Google BigQuery:将 ExecuteQuery 结果以 json 格式上传到 Google Cloud Storage