将JSON加载到bigquery - 字段有时是数组,有时是字符串

时间:2017-02-06 17:17:24

标签: google-bigquery

我正在尝试将JSON数据加载到BigQuery。导致问题的数据摘录如下:

{"page":"295"}
{"page":["295", "123"]}

我已将此字段的架构定义为:

{
  "name": "page",
  "type": "string",
  "mode": "repeated"
}

我收到错误“必须将重复字段导入为JSON数组。”我认为问题是由JSON本身的结构引起的。第一行中的字符串应为1个元素数组,而不仅仅是一个字符串。数据像这样传达给我。我试图找到一种方法来强制BigQuery将此字符串作为单元素数组读取而不是修复文件(这是100千兆字节)。有没有解决方案?

1 个答案:

答案 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; 列返回。