如何在 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 datasethttps://console.cloud.google.com/marketplace/details/bigquery-public-data/bitcoin-blockchain。然后,在左侧边栏中,您似乎必须单击“bigquery-public-data”的下拉菜单,然后单击“bitcoin_blockchain”,然后单击“交易”。然后在右侧,您必须单击“查询表”按钮。这是我发现选择表格的唯一方法 - 只需复制和粘贴下面的命令不会重新创建错误。

根据上述说明出现的表格,我注意到outputsrecord 类型。我只想从记录中查看一个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 中日期之间的空白

如何在 BigQuery 上引用记录的提交时间

如何同步调用 google-bigquery 删除和插入 API?

Python:如何使用 pandas 数据框更新(覆盖)Google BigQuery 表

按日期时间 Google BigQuery 分区

Google BigQuery:将 ExecuteQuery 结果以 json 格式上传到 Google Cloud Storage