为嵌套表创建一个模式 - bigquery

时间:2014-03-25 10:58:33

标签: google-bigquery

我正在尝试上传一个包含多个嵌套级别的测试数据表,但我似乎无法正确指定架构的语法。

这是我当前的架构文件:

{
  "name":"city", "type":"RECORD",
    [
      {"name":"id", "type":"INTEGER"},
      {"name":"name", "type":"STRING"},
      {"name":"country", "type":"STRING"},
      {"name":"coord", "type":"RECORD"},
        [
          {"name":"lon", "type":"FLOAT"},
          {"name":"lat", "type":"FLOAT"}
        ],
    {"name":"time", "type":"TIMESTAMP"}
  ]
}

以下是数据样本:

{"city":{"id":1283240,"name":"Kathmandu","country":"NP","coord":{"lon":85.316666,"lat":27.716667}},"time":1394865171,"data":[{"dt":1394852400,"main":{"temp":296.15,"temp_min":293.866,"temp_max":296.15}},{"dt":1394863200,"main":{"temp":301.51,"temp_min":299.345,"temp_max":301.51}}]}

在完整档案中,我有多个城市,每个都有多个"数据"每天积分。

由于

标记

1 个答案:

答案 0 :(得分:7)

如果您有RECORD类型,则需要命名架构JSON数组fields:。如:

{
  "name":"city", "type":"RECORD", 
  "fields": [
      {"name":"id", "type":"INTEGER"},
      {"name":"name", "type":"STRING"},
      {"name":"country", "type":"STRING"},
      {"name":"coord", "type":"RECORD",
      "fields": [
          {"name":"lon", "type":"FLOAT"},
          {"name":"lat", "type":"FLOAT"}
        ]},
    {"name":"time", "type":"TIMESTAMP"}
  ]
}

还有一个问题是你让}在错误的位置关闭内部架构。

我喜欢使用的一个技巧是使用Python的json.loads()函数来验证我是否实际创建了一个有效的JSON对象,因为有时很难弄清楚你是否已经拥有了所有的JSON对象。您需要的逗号并正确关闭所有引号。例如:

$ python
>>> import json
>>> schema = """
... <paste your initial schema>
... """
>>> json.loads(schema)

ValueError: Expecting property name: line 4 column 5 (char 41)

(抱怨你有一个没有属性名的数组元素......你需要“字段”)。