我使用现有的BigTable表生成了一个BigQuery表,结果是一个我很难查询的多嵌套数据集。这是BigQuery表中只是做一个简单的select * from my_table limit 1
:
[
{
"rowkey": "XA_1234_0",
"info": {
"column": [],
"somename": {
"cell": [
{
"timestamp": "1514357827.321",
"value": "1234"
}
]
},
...
}
},
...
]
我需要的是能够从my_table
获取value
somename
为{X}的所有条目。将有多个rowkeys,value
的{{1}}将为X,我需要来自每个rowkey条目的所有数据。
OR
如果我有一个查询,其中rowkey包含X,那么得到“XA_1234_0”,“XA_1234_1”......“XA”和“0”可以改变,但中间的数字是相同的。我已经尝试过somename
,但查询会持续一分钟以上,并且由于某种原因太长了。
我正在使用标准SQL。
编辑:这是我尝试过的一个不起作用的查询示例(错误:where rowkey like "$_1234_$"
),但最好描述了我想要实现的目标:
Cannot access field value on a value with type ARRAY<STRUCT<timestamp TIMESTAMP, value STRING>>
我想获取SELECT * FROM `my_dataset.mytable` where info.field_name.cell.value=12345
中value
等于某个值的所有记录。
答案 0 :(得分:2)
来自sample Firebase Analytics dataset:
#standardSQL
SELECT *
FROM `firebase-analytics-sample-data.android_dataset.app_events_20160607`
WHERE EXISTS(
SELECT * FROM UNNEST(user_dim.user_properties)
WHERE key='powers' AND value.value.string_value='20'
)
LIMIT 1000
答案 1 :(得分:1)
以下是BigQuery Standard SQL
#standardSQL
SELECT t.*
FROM `my_dataset.mytable` t,
UNNEST(info.somename.cell) c
WHERE c.value = '1234'
以上假设特定value
只能出现在每个记录中一次 - 希望这对您来说是真实的
如果不是这种情况 - 下面应该是
#standardSQL
SELECT *
FROM `yourproject.yourdadtaset.yourtable`
WHERE EXISTS(
SELECT *
FROM UNNEST(info.somename.cell)
WHERE value = '1234'
)
我刚刚意识到与Felipe的版本差不多 - 但只是使用你的表/架构