假设我有以下JSON,这是从日志文件中解析urls参数的结果。
{
"title": "History of Alphabet",
"author": [
{
"name": "Larry"
},
]
}
{
"title": "History of ABC",
}
{
"number_pages": "321",
"year": "1999",
}
{
"title": "History of XYZ",
"author": [
{
"name": "Steve",
"age": "63"
},
{
"nickname": "Bill",
"dob": "1955-03-29"
}
]
}
顶级所有字段,"标题","作者"," number_pages","年"是可选的。第二级中的字段也是如此,例如#34;作者"。
将JSON加载到BQ时,如何为此JSON制作架构?
相关问题: 例如,假设有另一个类似的表,但数据来自不同的日期,因此可能有不同的模式。是否可以跨这两个表进行查询?
答案 0 :(得分:2)
将JSON加载到BQ时,如何为此JSON制作架构?
以下架构应该有效。您可能想要更改某些类型(例如,您可能希望dob字段为TIMESTAMP
而不是STRING
),但一般结构应该类似。由于默认情况下类型为NULLABLE
,因此所有这些字段都应该处理不存在给定行。
[
{
"name": "title",
"type": "STRING"
},
{
"name": "author",
"type": "RECORD",
"fields": [
{
"name": "name",
"type": "STRING"
},
{
"name": "age",
"type": "STRING"
},
{
"name": "nickname",
"type": "STRING"
},
{
"name": "dob",
"type": "STRING"
}
]
},
{
"name": "number_pages",
"type": "INTEGER"
},
{
"name": "year",
"type": "INTEGER"
}
]
一个相关的问题:例如,假设有另一个类似的表,但数据来自不同的日期,因此可能有不同的模式。是否可以跨这两个表进行查询?
应该可以将具有不同模式的两个表联合起来而不会有太多困难。
以下是一个关于它如何在公共数据上工作的快速示例(一种愚蠢的例子,因为这些表包含共同的零字段,但显示了这个概念):
SELECT * FROM
(SELECT * FROM publicdata:samples.natality),
(SELECT * FROM publicdata:samples.shakespeare)
LIMIT 100;
请注意,每个表周围都需要SELECT *
,否则查询会抱怨不同的模式。