首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取BigQuery中嵌套字段的第一行

获取BigQuery中嵌套字段的第一行
EN

Stack Overflow用户
提问于 2018-06-25 01:14:20
回答 2查看 2.3K关注 0票数 2

我一直在纠结于一个看似简单,但却让我难以理解的问题。我正在处理比特币上的公共BigQuery表,我想提取挖掘的每个块的第一个事务。换言之,将嵌套字段替换为其在表格预览中显示的第一行。没有字段可以标识它,只有它在表中存储的顺序。

我运行了following query

代码语言:javascript
复制
#StandardSQL
SELECT timestamp,
    block_id,
    FIRST_VALUE(transactions) OVER (ORDER BY (SELECT 1))
FROM `bigquery-public-data.bitcoin_blockchain.blocks`

但它在运行时会处理492 GB,并抛出以下错误:

代码语言:javascript
复制
Error: Resources exceeded during query execution: The query could not be executed in the allotted memory. Sort operator used for OVER(ORDER BY) used too much memory..

这看起来很简单,我一定是漏掉了什么。你有关于如何处理这样的任务的想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-25 02:45:47

代码语言:javascript
复制
#standardSQL
SELECT * EXCEPT(transactions),
  (SELECT transaction FROM UNNEST(transactions) transaction LIMIT 1) transaction
FROM `bigquery-public-data.bitcoin_blockchain.blocks`    

推荐:当使用像这样的大桌子时-我建议创建它的较小版本-这样你的开发/测试就会产生更少的成本。下面的代码可以帮助你做到这一点--你可以在带有目标表的BigQuery UI中运行它,然后你就可以在你的开发中使用它了。确保设置了Allow Large Results和取消设置了Flatten Results,以便保留原始模式

代码语言:javascript
复制
#legacySQL
SELECT *
FROM [bigquery-public-data:bitcoin_blockchain.blocks@1529518619028]     

1529518619028的值来自以下查询(在运行时)-我四天前使用的原因是,我知道这个表中的行数只有912,而不是当前的528,858

代码语言:javascript
复制
#legacySQL
SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -24*4, 'HOUR')/1000) 
票数 4
EN

Stack Overflow用户

发布于 2018-06-27 04:45:38

Mikhail的另一种方法:只需使用[OFFSET(0)]请求数组的第一行

代码语言:javascript
复制
#StandardSQL
SELECT timestamp,
    block_id,
    transactions[OFFSET(0)] first_transaction
FROM `bigquery-public-data.bitcoin_blockchain.blocks`
LIMIT 10

数组中的第一行仍然有一些嵌套数据,您可能也希望将这些数据展平到它们的第一行:

代码语言:javascript
复制
#standardSQL
SELECT timestamp
    , block_id
    , transactions[OFFSET(0)].transaction_id first_transaction_id
    , transactions[OFFSET(0)].inputs[OFFSET(0)] first_transaction_first_input
    , transactions[OFFSET(0)].outputs[OFFSET(0)] first_transaction_first_output
FROM `bigquery-public-data.bitcoin_blockchain.blocks`
LIMIT 1000
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51012204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档