Google cloud platform 使用两列匹配Google BigTable数据
我们需要将天气预报数据存储在数据库中,以便通过API按纬度/经度进行查询 预测数据本机以GRIB2文件的形式提供,这是一种具有多个波段的地理参考光栅格式。 GRIB2文件可以转换为csv,从而使文件大小增加20-40倍。 如果将csv存储在数据库中,数据约为35GB,并包含以下列:Google cloud platform 使用两列匹配Google BigTable数据,google-cloud-platform,google-cloud-bigtable,bigtable,Google Cloud Platform,Google Cloud Bigtable,Bigtable,我们需要将天气预报数据存储在数据库中,以便通过API按纬度/经度进行查询 预测数据本机以GRIB2文件的形式提供,这是一种具有多个波段的地理参考光栅格式。 GRIB2文件可以转换为csv,从而使文件大小增加20-40倍。 如果将csv存储在数据库中,数据约为35GB,并包含以下列: 0,rt,timestamp 1,vt,timestamp 2,param,string 3,level,string 4,lon,float 5,lat,float 6,value,float 此数据将每小时更改
0,rt,timestamp
1,vt,timestamp
2,param,string
3,level,string
4,lon,float
5,lat,float
6,value,float
此数据将每小时更改一次,需要重新摄取到数据库中。这意味着在任何情况下,摄入时间都不能超过一小时(最好短得多)
除此之外,30天以前的预测数据必须存储在另一个(或多个)数据库表中,并且还可以通过API进行查询。
30天的预测数据相当于720小时的摄取量,即720*35gb=25.2 TB。
每小时必须删除最早的721小时,并将数据从最新预测表传输到存档表
我研究了多种托管google数据库解决方案(BigQuery、云扳手、数据存储、BigTable)。
到目前为止,BigTable定价结构似乎最适合此API
但是,我似乎无法按列值查询数据,更不用说按两列值(纬度和经度)查询了。是这样吗?是否有任何方法来构造数据以绕过此限制?如果是,我将如何查询
如果BigTable是这项工作的错误工具,我希望能推荐一种更合适的服务 你想做的是可能的,但是,你必须记住两个主要方面:
- 将纬度连接到高度:关键行:经度#纬度。
- 相同经度上的相似纬度存储在一起
- 将高度连接到纬度:关键行:纬度#经度
- 相同高度上的相似经度存储在一起
- 存储在附近的位置:称为空格填充函数:键行:Integer
- 有关它的信息可以在
stats
(来自Cloud Shell):
cbt createinstance我的实例“我的实例”my-instance-c1 europe-west1-b 3 SSD
cbt createtable weather ts“families=stats:maxage=30d | | maxversions=31”
将值设置为键123123的CSV(所有字符串):
cbt设置天气ts 123123统计:value='FIRST\u CSV'
cbt设置天气ts 123123统计信息:value='SECOND\u CSV'
请参阅存储的值:
cbt读取天气ts
我的输出:
2020/01/06 10:29:37 -creds flag unset, will use gcloud credential
----------------------------------------
123123
stats:value @ 2020/01/06-10:29:35.093000
"SECOND_CSV"
stats:value @ 2020/01/06-10:29:33.224000
"FIRST_CSV"
----------------------------------------
Bigtable,因此总存储使用量可能会低于您的预期。您能否分享有关要对这些数据执行的查询类型的更多详细信息?考虑到您的案例,BigTable似乎是正确的工具,因为它具有惊人的吸收速度,但是您需要仔细设计表和索引,使其真正强大。我也看到了使用BigQuery的可能性,如果您不需要公开真正的旧数据,但只想保留它们以供分析,那么您也可以使用它的数据过期功能使数据在一段时间后消失。