BigQuery 可以 运行 在控制台中查询但不能将其作为作业启动
BigQuery can run query in console but not launch it as a job
我在启动以下查询时遇到问题:
SELECT COUNT(*) FROM
(
SELECT field_name FROM [dataset.table]
WHERE
time BETWEEN DATE_ADD(CURRENT_TIMESTAMP(), -30, "DAY") AND
CURRENT_TIMESTAMP() AND
GROUP EACH BY field_name
) AS cur_month
JOIN EACH
(
SELECT field_name FROM [dataset.table]
WHERE
time BETWEEN DATE_ADD(CURRENT_TIMESTAMP(), -60, "DAY") AND
DATE_ADD(CURRENT_TIMESTAMP(), -30, "DAY") AND
GROUP EACH BY field_name
) AS prev_month
ON cur_month.field_name = prev_month.field_name
运行 控制台中的此查询成功,但 运行 使用以下 java 代码失败
JobConfigurationQuery queryConfig = new JobConfigurationQuery()
.setQuery(query)
.setDestinationTable(new TableReference()
.setProjectId(projectId)
.setDatasetId(toDataset)
.setTableId(toTableId))
.setAllowLargeResults(true)
.setCreateDisposition("CREATE_IF_NEEDED")
.setWriteDisposition("WRITE_TRUNCATE")
.setPriority("BATCH")
.setFlattenResults(false);
我得到的错误是
{
"errorResult": {
"location": "query",
"message": "Ambiguous field name 'field_name' in JOIN. Please use the table qualifier before field name.",
"reason": "invalidQuery"
},
"errors": [
{
"location": "query",
"message": "Ambiguous field name 'field_name' in JOIN. Please use the table qualifier before field name.",
"reason": "invalidQuery"
}
],
"state": "DONE"
}
有人知道为什么吗?
您需要详细检查您确实执行了您发布的查询,因为我在查询中没有看到任何 device_id
,但错误消息很清楚:
Ambiguous field name 'device_id' in JOIN. Please use the table qualifier before field name.
您需要确保 device_id 列在字段名称之前具有 table 限定符。
该问题与以下内容重复:
将 flatten results 设置为 true 解决了我的问题。
我在启动以下查询时遇到问题:
SELECT COUNT(*) FROM
(
SELECT field_name FROM [dataset.table]
WHERE
time BETWEEN DATE_ADD(CURRENT_TIMESTAMP(), -30, "DAY") AND
CURRENT_TIMESTAMP() AND
GROUP EACH BY field_name
) AS cur_month
JOIN EACH
(
SELECT field_name FROM [dataset.table]
WHERE
time BETWEEN DATE_ADD(CURRENT_TIMESTAMP(), -60, "DAY") AND
DATE_ADD(CURRENT_TIMESTAMP(), -30, "DAY") AND
GROUP EACH BY field_name
) AS prev_month
ON cur_month.field_name = prev_month.field_name
运行 控制台中的此查询成功,但 运行 使用以下 java 代码失败
JobConfigurationQuery queryConfig = new JobConfigurationQuery()
.setQuery(query)
.setDestinationTable(new TableReference()
.setProjectId(projectId)
.setDatasetId(toDataset)
.setTableId(toTableId))
.setAllowLargeResults(true)
.setCreateDisposition("CREATE_IF_NEEDED")
.setWriteDisposition("WRITE_TRUNCATE")
.setPriority("BATCH")
.setFlattenResults(false);
我得到的错误是
{
"errorResult": {
"location": "query",
"message": "Ambiguous field name 'field_name' in JOIN. Please use the table qualifier before field name.",
"reason": "invalidQuery"
},
"errors": [
{
"location": "query",
"message": "Ambiguous field name 'field_name' in JOIN. Please use the table qualifier before field name.",
"reason": "invalidQuery"
}
],
"state": "DONE"
}
有人知道为什么吗?
您需要详细检查您确实执行了您发布的查询,因为我在查询中没有看到任何 device_id
,但错误消息很清楚:
Ambiguous field name 'device_id' in JOIN. Please use the table qualifier before field name.
您需要确保 device_id 列在字段名称之前具有 table 限定符。
该问题与以下内容重复:
将 flatten results 设置为 true 解决了我的问题。