我收到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()函数时也遇到同样的错误。
答案 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。