Google bigquery 任意标记的BigQuery模式设计
我正在研究使用BigQuery在时间序列中存储传感器数据的可行性。其目的是将数据存储在BQ中,并在。。。到现在为止,一直都还不错。。。Pandas可以解释时间戳字段索引并创建序列 另外一个要求是,数据支持任意标记作为键/值对(例如,job_id=1234,task_id=5678)。BigQuery可以通过重复记录类型的字段很好地支持这一点:Google bigquery 任意标记的BigQuery模式设计,google-bigquery,google-cloud-bigtable,Google Bigquery,Google Cloud Bigtable,我正在研究使用BigQuery在时间序列中存储传感器数据的可行性。其目的是将数据存储在BQ中,并在。。。到现在为止,一直都还不错。。。Pandas可以解释时间戳字段索引并创建序列 另外一个要求是,数据支持任意标记作为键/值对(例如,job_id=1234,task_id=5678)。BigQuery可以通过重复记录类型的字段很好地支持这一点: {'fields': [
{'fields':
[
{
"mode": "NULLABLE",
"name": "timestamp",
"type": "TIMESTAMP"
},
{
"mode": "REPEATED",
"name": "tag",
"type": "RECORD",
"fields":
[
{
"name":"name",
"type":"STRING"
},
{
"name":"value",
"type":"STRING"
},
{
"mode": "NULLABLE",
"name": "measurement_1",
"type": "FLOAT"
},
{
"mode": "NULLABLE",
"name": "measurement_2",
"type": "FLOAT"
},
{
"mode": "NULLABLE",
"name": "measurement_3",
"type": "FLOAT"
},
]
},
]
}
这对于存储数据非常有效,如果我只需要对单个键/值组合进行筛选,它甚至可以用于查询
SELECT measurement_1 FROM measurements
WHERE tag.name = 'job_id' AND tag.value = '1234'
然而,我还需要能够在查询表达式中组合标记集,而我似乎无法做到这一点。例如,此查询不返回任何结果
SELECT measurement_1 FROM measurements
WHERE tag.name = 'job_id' AND tag.value = '1234'
AND tag.name = 'task_id' AND tag.value = '5678'
问题:是否可以使用这个模式来构造一个查询来做我想做的事情?在大查询中,将这种类型的变量数据附加到其他固定模式的建议方法是什么
谢谢你的帮助和建议
注意:如果您认为这看起来是一个很好的XDB修复程序,那是因为到目前为止我一直在使用它。似乎无法解决的问题是我的数据集中的系列基数的数量,因此我正在寻找替代方案。BigQuery遗留SQL
SELECT measurement_1 FROM measurements
OMIT RECORD IF
SUM((tag.name = 'job_id' AND tag.value = '1234')
OR (tag.name = 'task_id' AND tag.value = '5678')) < 2
重复是存储数据系列、收集等的好方法。
为了从重复的字段中筛选出一个感兴趣的值,我将使用以下模板
SELECT
MAX( IF( filter criteria, value_to_pull, null)) WITHIN RECORD AS some_name
FROM <table>
为什么要标记python、pandas和time series?重要的是,您可以通过使用投递答案左侧投票下方的勾号来标记已接受的答案。看看为什么它很重要。同样重要的是对答案进行投票。投票选出有帮助的答案。还有更多。。。当有人回答你的问题时,你可以检查一下该做什么。
SELECT
MAX( IF( filter criteria, value_to_pull, null)) WITHIN RECORD AS some_name
FROM <table>
SELECT
MAX(IF(tag.name = 'job_id' AND tag.value = '1234', measurement_1, NULL)) WITHIN RECORD AS job_1234_meassurement_1,
MAX(IF(tag.name = 'task_id' AND tag.value = '5678', measurement_1, NULL)) WITHIN RECORD AS task_5678_meassurement_1,
FROM measurements