我在Bigquery中有一个表,该表具有如下所示的JSON数据。
{
"block_id": "000000000000053d90510fa4bbfbbed243baca490c85ac7856b1a1fab4d367e4",
"transactions": [
{
"transaction_id": "4529b00ed3315ff85408118ef5992b3ad2b47f4c1c088cc3dea46084bdb600df",
"inputs": [
{
"input_script_bytes": "BIvbBRoDwAgBEi9QMlNIL0JJUDE2L3NsdXNoL1Is+r5tbf4lsR1tDNnUOZk9JGzN4MkWc914Rol/+47Hn+msUG/nAQAAAAAAAAA=",
"input_pubkey_base58_error": null
}
],
"outputs": [
{
"output_satoshis": "5048296000",
"output_pubkey_base58_error": "Cannot cast this script to a pay-to-address type"
}
]
},
{
"transaction_id": "838b03a6f741c844e22079cdb0d1401b9687d65a82f355ccb0a993b042c49d54",
"inputs": [
{
"input_script_bytes": "RzBEAiAE5fM2NHAEaWy9utrC2ypHQsKwUDeUTp/gjbj5tSy3lwIgUXXFcuwXhr3tx1m5D+kznhklTAK9+YYHRcB43aXTAZ8BQQR86qInfhczeYqqJsAD9yFfxSAzBAmIBlxk/bpTQSxgLkF4Ttipiuuoxt6TTVMDK/eewwFhAPJiHrvZq0psKI1d",
"input_pubkey_base58_error": null
}
],
"outputs": [
{
"output_satoshis": "1",
"output_pubkey_base58_error": null
},
{
"output_satoshis": "4949999",
"output_script_bytes": "dqkU4E0i4TQg1I6OpprIt6v7Ipuda/GIrA==",
"output_pubkey_base58_error": null
}
]
}
]
}
我想从此表中提取transaction_id
,output.input_pubkey_base58_error
。
如何使用UNNEST做到这一点? 您可以参考上面的示例代码。
答案 0 :(得分:2)
看起来sintax应该是这样的。 (没有尝试!)。猜测您的表在bigquery中称为mybitcoindata
SELECT block_id, output.output_pubkey_base58_error
FROM yourdataset.yourtable as A
CROSS JOIN UNNEST(A.transactions) AS transaction
CROSS JOIN UNNEST(transaction.outputs) AS output
;
有很好的例子here
编辑: 刚刚测试。如果将json数据转换为单行json,则可以在bigquery中创建表。上面的查询可以爆炸多个数组。
答案 1 :(得分:1)
首先,我想澄清一下,您说您对字段transaction_id
和output.input_pubkey_base58_error
感兴趣,但是根据表模式,后者并不存在(也许您指的是inputs.input_pubkey_base58_error
或outputs.output_pubkey_base58_error
)。因此,我认为您有必要弄清楚场景和/或用例。
在任何情况下,使用您提到的the public Bitcoin dataset,都可以使用以下查询,以便仅查询(使用标准SQL)感兴趣的字段。
#standardSQL
SELECT
tr.transaction_id,
inp.input_pubkey_base58_error,
out.output_pubkey_base58_error
FROM
`bigquery-public-data.bitcoin_blockchain.blocks`,
UNNEST(transactions) AS tr,
UNNEST(tr.inputs) AS inp,
UNNEST(tr.outputs) as out
LIMIT
100
在此查询中,我使用UNNEST
StandardSQL operator来查询数组中的特定字段,但是我强烈建议您仔细阅读该文档,以了解有关如何操作的更多详细信息和特定示例。可以。