在Google Dataprep中转换字符串为数组。

问题描述 投票:0回答:1

我正试图在Dataprep中对数据进行去正常化,以便在BigQuery中使用它。

更具体的说,我想把连接到我的账户表的account_profile表中的条目,用外键'account_id'变成我的账户表中的一个数组。(account_profile存储的是联系方法......名字不好听,我知道。)

在dataprep中,我已经

  1. 将account_profile中的行变成了json对象。
  2. 然后通过account_id将两个表连接起来。
  3. 然后按account_id对行进行分组,并使用聚合函数LIST将所有对象转换为一个对象数组。

问题是,当我试图在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工具链中存在的这种差距感到惊讶。 我缺少了什么?

arrays google-bigquery data-conversion google-cloud-dataprep
1个回答
1
投票

下面是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}
© www.soinside.com 2019 - 2024. All rights reserved.