我正试图在Dataprep中对数据进行去正常化,以便在BigQuery中使用它。
更具体的说,我想把连接到我的账户表的account_profile表中的条目,用外键'account_id'变成我的账户表中的一个数组。(account_profile存储的是联系方法......名字不好听,我知道。)
在dataprep中,我已经
问题是,当我试图在BigQuery中取消嵌套该列,或者在BigQuery中进行任何其他类似数组的操作时,我得到了这样一个错误。"UNNEST中引用的值必须是数组"
我的数据看起来不错。 例如,这里有一行。
[{"profile_identifier": "[email protected]", "vercer_code": "abc789", "enabled":true, "id1":2818},{"profile_identifier": "xyz123, "enabled":false, "id1":2874}] 。
我找不到办法让BigQuery将其视为一个数组,也找不到办法让Dataprep将这种数据创建为一个数组而不是一个字符串。 人们发布的唯一的解决方案是非常具体的黑客,并不适用于这种通用情况。
我觉得我遵循的是去正常化的最佳实践,并对Google ELT工具链中存在的这种差距感到惊讶。 我缺少了什么?
下面是BigQuery标准SQL
您可以使用最近引进的 JSON_EXTRACT_ARRAY(字符串) 函数,如下图所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT '''[
{"profile_identifier":"[email protected]","verification_code":"abc789","enabled":true,"id1":2818},
{"profile_identifier":"xyz123","enabled":false,"id1":2874}
]''' string_col
)
SELECT JSON_EXTRACT_ARRAY(string_col) AS arr_col
FROM `project.dataset.table`
有产出
Row arr_col
1 {"profile_identifier":"[email protected]","verification_code":"abc789","enabled":true,"id1":2818}
{"profile_identifier":"xyz123","enabled":false,"id1":2874}