我有一个包含嵌套记录的BQ表。一条记录看起来与此类似:
{
"event_date": "2018-11-14",
"event_params": [
{
"string": "foo",
"int": null
},
{
"string": "52.49",
"int": null
}
]
}
您可以通过重复将其表示为pandas / CSV。在上面单个记录的特定情况下,它将变成两行:
,event_date event_params.string event_params.int
1,2018-11-14 foo null
2,2018-11-14 52.49 null
请注意,这样的导出是一种单向选项。无法判断两行1
和2
是属于单个记录还是属于两个记录。一种解决方案是在每个记录中添加一个标识符。
BQ是否有记录的内部标识符?
使用
SELECT * FROM `my-table.foobar.events_20181110`
我没有行标识符。
答案 0 :(得分:1)
BQ是否有用于记录的内部标识符?
您可以生成此类标识符-参见下面的示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT ['a', 'b', 'c'] arr UNION ALL
SELECT ['x', 'y']
)
SELECT id, item FROM (
SELECT GENERATE_UUID() id, arr
FROM `project.dataset.table`
), UNNEST(arr) item
有结果
Row id item
1 4f47d6c2-a6d8-4923-8c20-5836a9a89d36 a
2 4f47d6c2-a6d8-4923-8c20-5836a9a89d36 b
3 4f47d6c2-a6d8-4923-8c20-5836a9a89d36 c
4 1d348ac5-ec5a-4065-a4ec-46404a7ca193 x
5 1d348ac5-ec5a-4065-a4ec-46404a7ca193 y
或
#standardSQL
WITH `project.dataset.table` AS (
SELECT ['a', 'b', 'c'] arr UNION ALL
SELECT ['x', 'y']
)
SELECT id, item FROM (
SELECT ROW_NUMBER() OVER() id, arr
FROM `project.dataset.table`
), UNNEST(arr) item
结果为
Row id item
1 1 a
2 1 b
3 1 c
4 2 x
5 2 y
请记住,由于使用了ROW_NUMBER(),第二个示例的可伸缩性较差