FreeZey
FreeZey

Reputation: 2812

How to create a BigQuery View using REST request

I've tried building and sending the REST request using the Google Tables: insert page with the following (sanitised) values:

Request parameters

projectId:prj-name
datasetId:dataset_name

Request body

{
  "view": {
    "useLegacySql": false,
    "query": "SELECT * FROM `prj-name.dataset_name.hello_world`"
  },
  "type": "VIEW",
  "tableReference": {
    "projectId": "prj-name",
    "datasetId": "dataset_name",
    "tableId": "v_hello_world"
  }
}

This post suggests these parameters should work, but Google returns the following response:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalid",
    "message": "Output field used as input"
   }
  ],
  "code": 400,
  "message": "Output field used as input"
 }
}

I've experimented with the REST properties and I think the 400 issue is caused by the inclusion of the tableReference property. But if I exclude it I get the following alternative error:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Required parameter is missing"
   }
  ],
  "code": 400,
  "message": "Required parameter is missing"
 }
}

It's a shame that the "Required parameter" is not named in this error message!

I can use this code method to create the view but that code method throws an exception when patching views.

Help is appreciated. I'd rather not have to maintain two different ways of managing views in my code.

Thanks.

Upvotes: 0

Views: 117

Answers (1)

Graham Polley
Graham Polley

Reputation: 14791

Remove "type": "VIEW", from your request.

That's not an input parameter. It's an output field from the response.

https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#resource

enter image description here

Upvotes: 3

Related Questions