简体   繁体   English

如何从json文件中获取表架构:parse_table_schema_from_json?

[英]How to get table schema from json file: parse_table_schema_from_json?

I am trying to get the table schema using parse_table_schema_from_json from apache_beam.io.gcp.bigquery import parse_table_schema_from_json from here 我正在尝试from apache_beam.io.gcp.bigquery import parse_table_schema_from_json使用parse_table_schema_from_json获取表架构,从此处 from apache_beam.io.gcp.bigquery import parse_table_schema_from_json

Here is my code: 这是我的代码:

 def getSchema(pathToJSON):
    with open(pathToJSON) as data_file:
        schema_data = json.dumps(json.load(data_file))
    table_schema = parse_table_schema_from_json(schema_data)
    # print(table_schema)
    return table_schema

Here is the error I get: 这是我得到的错误:

    Traceback (most recent call last):
  File "test_get_schema.py", line 16, in <module>
    getSchema("vauto_table_schema.json")
  File "test_get_schema.py", line 13, in getSchema
    table_schema = parse_table_schema_from_json(schema_data)
  File "/home/usr/.local/lib/python2.7/site-packages/apache_beam/io/gcp/bigquery.py", line 269, in parse_table_schema_from_json
    fields = [_parse_schema_field(f) for f in json_schema['fields']]
TypeError: list indices must be integers, not str

my json file looks like this: 我的json文件如下所示:

[
  {
    "name": "StockNumber",
    "type": "INTEGER",
    "mode": "NULLABLE"
  },
  {
    "name": "Product",
    "type": "STRING",
    "mode": "NULLABLE"
  }
]

What am I missing? 我想念什么?

You need dict instead of list. 您需要字典而不是列表。 Modify your function and schema file like below mentioned and try again 修改您的函数和架构文件,如下所述,然后重试

  def getSchema(pathToJSON):
    schema_data = json.dumps(json.load(open("mapping.json")))
    table_schema = parse_table_schema_from_json(schema_data)
    # print(table_schema)
    return table_schema

your schema file should be 您的架构文件应为

{
  "fields": [
   {
    "type": "INTEGER",
    "name": "StockNumber",
    "mode": "NULLABLE"
  },
  {
    "type": "STRING",
    "name": "Product",
    "mode": "NULLABLE"
  }
  ]
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM