Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resolving error: returned "Output field used as input"

I'm trying to create a BigQuery table using Python. Other operations (queries, retrieving table bodies etc.) are working fine, but when trying to create a table I'm stuck with an error:

apiclient.errors.HttpError: https://www.googleapis.com/bigquery/v2/projects/marechal-consolidation/datasets/marechal_results/tables?alt=json returned "Output field used as input">

Here's the command I'm executing:

projectId = 'xxxx'
dataSet = 'marechal_results'
with open(filePath+'tableStructure.json') as data_file:
    structure = json.load(data_file)
table_result = tables.insert(projectId=projectId, datasetId=dataSet, body=structure).execute()

JSON table:

{
  "kind": "bigquery#table",

  "tableReference": {
    "projectId": "xxxx",
    "tableId": "xxxx",
    "datasetId": "xxxx"
  },

  "type": "table",
  "schema": {
    "fields": [
      {
        "mode": "REQUIRED",
        "type": "STRING",
        "description": "Company",
        "name": "COMPANY"
      },
      {
        "mode": "REQUIRED",
        "type": "STRING",
        "description": "Currency",
        "name": "CURRENCY"
      }
// bunch of other fields follow...
    ]
  }
}

Why am I receiving this error?

EDIT: Here's the JSON object I'm passing as parameter:

{
  "kind": "bigquery#table",
  "type": "TABLE",
  "tableReference": {
    "projectId": "xxxx",
    "tableId": "xxxx",
    "datasetId": "xxxx"
  },    
  "schema": {
    "fields": [
      {
        "type": "STRING",
        "name": "COMPANY"
      },
      {
        "type": "STRING",
        "name": "YEAR"
  },
  {
    "type": "STRING",
    "name": "COUNTRY_ISO"
  },
  {
    "type": "STRING",
    "name": "COUNTRY"
  },
  {
    "type": "STRING",
    "name": "COUNTRY_GROUP"
  },
  {
    "type": "STRING",
    "name": "REGION"
  },
  {
    "type": "STRING",
    "name": "AREA"
  },
  {
    "type": "STRING",
    "name": "BU"
  },
  {
    "type": "STRING",
    "name": "REFERENCE"
  },
  {
    "type": "FLOAT",
    "name": "QUANTITY"
  },
  {
    "type": "FLOAT",
    "name": "NET_SALES"
  },
  {
    "type": "FLOAT",
    "name": "GROSS_SALES"
  },
  {
    "type": "STRING",
    "name": "FAM_GRP"
  },
  {
    "type": "STRING",
    "name": "FAMILY"
  },
  {
    "type": "STRING",
    "name": "PRESENTATION"
  },
  {
    "type": "STRING",
    "name": "ORIG_FAMILY"
      },
      {
        "type": "FLOAT",
        "name": "REF_PRICE"
      },
      {
        "type": "STRING",
        "name": "CODE1"
      },
      {
        "type": "STRING",
        "name": "CODE4"
      }
    ]
  }
}
like image 577
Thibault Lefevre Avatar asked Oct 31 '22 01:10

Thibault Lefevre


1 Answers

This is probably too late to help you but hopefully it helps the next poor soul like me. It took me a while figure out what "Output field used as input" meant.

Though the API specifies the same object for the request (input) and response (output), some fields are only allowed in the response. In the docs you will see their descriptions prefixed with "Output only". From looking at your table definition I see that you have "type": "TABLE" and "type" is listed as an "Output only" property. So I would gander that if you remove it then that error will go away. Here is the link to the docs: https://cloud.google.com/bigquery/docs/reference/rest/v2/tables

It would help if they told you what field the violation was on.

like image 98
bygrace Avatar answered Jan 04 '23 14:01

bygrace