【发布时间】:2021-06-07 10:11:12
【问题描述】:
在 BigQuery 中,如何将许多列转换为 RECORD 或键值对数组 例如
源表
| id | Name | DOB | Sex |
|---|---|---|---|
| 1 | Fred | 01.01.2001 | M |
目标表
| Id | Name | Key | Value |
|---|---|---|---|
| 1 | Fred | DOB | 01.01.2001 |
| Sex | M |
我尝试了一些方法,但无法到达那里,有什么好的方法吗?
【问题讨论】:
标签: arrays google-bigquery record
在 BigQuery 中,如何将许多列转换为 RECORD 或键值对数组 例如
源表
| id | Name | DOB | Sex |
|---|---|---|---|
| 1 | Fred | 01.01.2001 | M |
目标表
| Id | Name | Key | Value |
|---|---|---|---|
| 1 | Fred | DOB | 01.01.2001 |
| Sex | M |
我尝试了一些方法,但无法到达那里,有什么好的方法吗?
【问题讨论】:
标签: arrays google-bigquery record
我已经尝试了一些方法,但无法到达那里,有什么好的方法吗?
不确定究竟是什么/可能是一个问题,因为它就像下面一样简单/直截了当
select id, Name,
[struct<key string, value string>('DOB', DOB),('Sex', Sex)] info
from `project.dataset.table`
有输出
同时,当您事先不知道这些列名并希望采用通用方法时,通常会出现问题 - 在这种情况下,您可以使用以下方法,其中列名 DOB 和 Sex 没有被使用
select id, Name,
array(
select as struct
split(replace(kv, '"', ''),':')[offset(0)] key,
split(replace(kv, '"', ''),':')[offset(1)] value,
from unnest(split(trim(to_json_string((select as struct * except (id, name) from unnest([t]))), '{}'))) kv
) info
from `project.dataset.table` t
具有完全相同的结果/输出
【讨论】: