API 查询中未找到 BigQuery 日期函数

Posted

技术标签:

【中文标题】API 查询中未找到 BigQuery 日期函数【英文标题】:BigQuery Date Functions Not Found in API Querying 【发布时间】:2016-11-22 22:32:21 【问题描述】:

当我尝试使用 node.js BQ API 运行以下查询时出现 ApiError: Function not found: STRFTIME_UTC_USEC 错误:

SELECT STRFTIME_UTC_USEC(created, "%h %d %Y") as user_created from `tablePath`

根据 BQ 文档 https://cloud.google.com/bigquery/docs/reference/legacy-sql#datetimefunctions ,函数 STRFTIME_UTC_USEC 在 BQ 中可用。事实上,相同的查询在 BQ 控制台网站上的查询生成器中工作(只需将表转义字符从 `` 更改为 [])。

调用查询的代码如下:

const BigQuery = require('@google-cloud/bigquery');
const sqlQuery = SELECT STRFTIME_UTC_USEC(created, "%h %d %Y") as user_created from `tablePath`
const options = 
query: sqlQuery,
useLegacySql: false // Use standard SQL syntax for queries.
;
bigquery.query(options)    
.then(function (results) 
  const rows = results[0];
  console.log(rows);
  callback(rows); 
);

有什么解决方案可以使用用于 BigQuery 的 node.js API 格式化时间戳吗?尝试在查询字符串中使用 YEAR() 函数时,我也遇到了同样的错误。

【问题讨论】:

【参考方案1】:

Legacy SQL 支持此功能,标准 SQL 不支持,但以下使其使用标准 sql,因此冲突/错误

useLegacySql: false // Use standard SQL syntax for queries.

只需将其删除或将其更改为 true

如果您需要/想要使用标准 SQL - 以下面为例

SELECT 
  FORMAT_DATE("%h %d %Y", CURRENT_DATE()), 
  FORMAT_TIMESTAMP("%h %d %Y", CURRENT_TIMESTAMP())

【讨论】:

【参考方案2】:

使用FORMAT_TIMESTAMP 函数,而不是特定于旧版 SQL 的 STRFTIME_UTC_USEC。另请参阅migration guide from legacy to standard SQL。

【讨论】:

以上是关于API 查询中未找到 BigQuery 日期函数的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery SQL 中未嵌套数组的字符串函数

大查询 UDF 支持

如何使用 BigQuery Python API 附加查询结果

Google BigQuery - 将通配符表查询与日期分区表一起使用?

分区表中未分区的旧行

将数组保存到 BigQuery