如何在 BigQuery 标准 SQL 中查询 Bigtable 列值?

Posted

技术标签:

【中文标题】如何在 BigQuery 标准 SQL 中查询 Bigtable 列值?【英文标题】:How can I query a Bigtable column value in BigQuery standard SQL? 【发布时间】:2018-12-12 01:15:33 【问题描述】:

我正在尝试使用 BigQuery 中的标准 SQL 查询 Bigtable 列值:

#standardSQL
SELECT
  default.blah.cell.value
FROM
  mycategory.mytable
WHERE
  rowkey LIKE '123%'

我收到错误:

Error: Syntax error: Unexpected keyword DEFAULT at [3:3]

上述查询在旧版 SQL 中运行良好,但在标准 SQL 中则不行。

仅选择行键是否在#standardSQL 中起作用:

#standardSQL
SELECT
  rowkey
FROM
  mycategory.mytable
WHERE
  rowkey LIKE '123%'

如何在标准 SQL 中选择列值,就像本文中的第一个查询尝试做的那样?

【问题讨论】:

【参考方案1】:

问题在于DEFAULT 是reserved keyword,因此您需要使用反引号将其转义。例如:

#standardSQL
SELECT
  `default`.blah.cell.value
FROM
  mycategory.mytable
WHERE
  rowkey LIKE '123%'

编辑:由于cell 是一个数组类型字段,如果目标是从其中读取值作为数组,您应该使用ARRAY 函数:

#standardSQL
SELECT
  ARRAY(SELECT value FROM UNNEST(`default`.blah.cell)) AS values
FROM
  mycategory.mytable
WHERE
  rowkey LIKE '123%'

您可以在文档中找到有关working with arrays 的更多信息。

【讨论】:

谢谢!这照顾了default!现在我收到此错误:Error: Cannot access field value on a value with type ARRAY<STRUCT<timestamp TIMESTAMP, value BYTES>> at [3:25] 不胜感激任何建议 添加了如何表达查询的示例。不过,如果您还有其他问题,请提交新的 *** 帖子。

以上是关于如何在 BigQuery 标准 SQL 中查询 Bigtable 列值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 中使用标准 SQL 查询 GA RealtimeView?

如果标准 SQL 不提供 _PARTITIONTIME 字段,我如何在 BigQuery 中查询流缓冲区

如何让 BigQuery 的 API 使用标准 SQL 进行查询?

如何在 ReDash 中设置标准 SQL BigQuery

如何使用标准 SQL 在 BigQuery 中透视表?

BigQuery:使用标准 SQL 查询多个数据集和表