【发布时间】:2021-12-03 03:05:12
【问题描述】:
我在 Google BigTable 中有一些数据,我在这些数据上构建了一个 BigQuery 外部表(根据 Querying Cloud Bigtable data,这样我就可以使用常规 SQL(我非常熟悉)查询 Bigtable 表。
现在我想知道在这个嵌套数据中查询特定值的语法。例如,要获取accountIds 的列表,我可以这样做:
SELECT ARRAY(SELECT timestamp FROM UNNEST(attributes.column[OFFSET(0)].cell)) AS timestamp,
ARRAY(SELECT SAFE_CONVERT_BYTES_TO_STRING(value) FROM UNNEST(attributes.column[OFFSET(0)].cell)) AS values
FROM `table`
where SAFE_CONVERT_BYTES_TO_STRING(rowkey) = 'XXXX'
这是,嗯,有点方便。
同样,我可以通过像这样更改 OFFSET 来获得car#le11mcr#policyStartDate:
SELECT ARRAY(SELECT timestamp FROM UNNEST(attributes.column[OFFSET(6)].cell)) AS timestamp,
ARRAY(SELECT SAFE_CONVERT_BYTES_TO_STRING(value) FROM UNNEST(attributes.column[OFFSET(6)].cell)) AS values
FROM `table`
where SAFE_CONVERT_BYTES_TO_STRING(rowkey) = 'XXXX'
但是,这两个查询都要求我知道要传递给 OFFSET() 的值,并且该值似乎取决于 Bigtable 列的字母顺序,因此如果另一个名称以(例如)“b”开头的列出现在将来我的查询将不再返回相同的内容。
我需要一种比使用OFFSET() 更好的查询表的方法。基本上我想能够说:
为名称为
accountId的单元格选择单元格值和时间戳记值
或
为名称为
car#le11mcr#policyStartDate的单元格选择单元格值和时间戳记值
有没有办法做到这一点?我对执行此操作的 BigQuery 语法不太熟悉。
【问题讨论】:
标签: google-bigquery google-cloud-bigtable