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

时间:2016-11-22 22:32:21

标签: node.js google-bigquery

我收到ApiError:找不到函数:当我尝试使用node.js BQ API运行以下查询时出现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); 
});

使用node.js API为BigQuery格式化时间戳的任何解决方案?尝试在查询字符串中使用YEAR()函数时也遇到同样的错误。

2 个答案:

答案 0 :(得分: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())

答案 1 :(得分:1)

使用FORMAT_TIMESTAMP函数,而不是遗留SQL特有的STRFTIME_UTC_USEC。另请参阅migration guide from legacy to standard SQL