从 sql BigQuery 中的数组对象中获取键值对
fetch key value pairs from array objects in sql BigQuery
我需要解析列 mapping
并从数组中的第二个对象中获取键值对。我想用获取的数据创建新列。数据如下所示:
row mapping
1 [{'adUnitCode': ca, 'id': 35, 'name': ca}, {'adUnitCode': hd, 'id': 11, 'name': HD}]
2 [{'adUnitCode': bb, 'id': 56, 'name': jk}, {'adUnitCode': hm, 'id': 12, 'name': HM}]
3 [{'adUnitCode': gh, 'id': 78, 'name': ff}, {'adUnitCode': hk, 'id': 13, 'name': HK}]
期望的输出:
row adUnitCode id name
1 hd 11 HD
2 hm 12 HM
3 hk 13 HK
以下是其中一种方法 (BigQuery Standard SQL)
#standardSQL
select
json_extract_scalar(second_object, "$.adUnitCode") as adUnitCode,
json_extract_scalar(second_object, "$.id") as id,
json_extract_scalar(second_object, "$.name") as name
from `project.dataset.table`, unnest(
[json_extract_array(regexp_replace(mapping, r"(: )(\w+)(,|})", "\1'\2'\3"))[safe_offset(1)]]
) as second_object
如果将以上应用到您问题中的样本数据 - 结果是
我需要解析列 mapping
并从数组中的第二个对象中获取键值对。我想用获取的数据创建新列。数据如下所示:
row mapping
1 [{'adUnitCode': ca, 'id': 35, 'name': ca}, {'adUnitCode': hd, 'id': 11, 'name': HD}]
2 [{'adUnitCode': bb, 'id': 56, 'name': jk}, {'adUnitCode': hm, 'id': 12, 'name': HM}]
3 [{'adUnitCode': gh, 'id': 78, 'name': ff}, {'adUnitCode': hk, 'id': 13, 'name': HK}]
期望的输出:
row adUnitCode id name
1 hd 11 HD
2 hm 12 HM
3 hk 13 HK
以下是其中一种方法 (BigQuery Standard SQL)
#standardSQL
select
json_extract_scalar(second_object, "$.adUnitCode") as adUnitCode,
json_extract_scalar(second_object, "$.id") as id,
json_extract_scalar(second_object, "$.name") as name
from `project.dataset.table`, unnest(
[json_extract_array(regexp_replace(mapping, r"(: )(\w+)(,|})", "\1'\2'\3"))[safe_offset(1)]]
) as second_object
如果将以上应用到您问题中的样本数据 - 结果是