我正在尝试将JSON数据加载到BigQuery。导致问题的数据摘录如下:
{"page":"295"}
{"page":["295", "123"]}
我已将此字段的架构定义为:
{
"name": "page",
"type": "string",
"mode": "repeated"
}
我收到错误“必须将重复字段导入为JSON数组。”我认为问题是由JSON本身的结构引起的。第一行中的字符串应为1个元素数组,而不仅仅是一个字符串。数据像这样传达给我。我试图找到一种方法来强制BigQuery将此字符串作为单元素数组读取而不是修复文件(这是100千兆字节)。有没有解决方案?
答案 0 :(得分:1)
一种选择是使用BigQuery来转换数据本身。假设您可以将行导入为CSV(选择一个不会出现在数据中的任意分隔符),您可以使用JSON_EXTRACT
函数来检索{{1}的值。跨行。例如,
page
您可以使用#standardSQL
SELECT JSON_EXTRACT(json, '$.page') AS page
FROM UnprocessedTable;
功能或SPLIT
随后检索单个值。
编辑:作为具体示例,您可以尝试此查询:
REGEXP_EXTRACT_ALL
这会将JSON数组(或标量字符串)作为#standardSQL
WITH T AS (
SELECT '{"page": "foo"}' AS json UNION ALL
SELECT '{"page": ["bar", "baz"]}' AS json UNION ALL
SELECT '{"page": ["a", "b", "c"]}' AS json
)
SELECT
REGEXP_EXTRACT_ALL(JSON_EXTRACT(json, '$.page'), r'"([^"]*)"') AS pages
FROM T;
列返回。