使用现有的JSON文件,如何将这些数据上传到BigQuery并使用JSON文件中的数据计算一个新字段?

时间:2018-08-08 16:09:19

标签: json google-bigquery

我有一个以换行符分隔的JSON文件,我将要上传到BigQuery。

JSON文件的每一行都包含许多字段,我想将这两个字段加在一起,以形成一个新列,其中包含两个值加在一起。

但是,有数百万条记录,我宁愿在完全上传JSON之后也不使用SQL来执行此操作。

有什么方法可以完成我想要的?

也许在JSON模式中?还是我将JSON和JSON模式上传到BigQuery的方式?

非常感谢! :)

1 个答案:

答案 0 :(得分:0)

检查我的“ lazy data loading in BigQuery”帖子:

诀窍是设置BigQuery,以使用罕见的字符分隔符将GCS文件作为联合CSV文件进行查找。然后,您可以在BigQuery本身内进行任何转换。

就我而言:

#standardSQL
CREATE VIEW `fh-bigquery.views.wikipedia_views_test_ddl`
AS SELECT
  PARSE_TIMESTAMP('%Y%m%d-%H%M%S', REGEXP_EXTRACT(_FILE_NAME, '[0-9]+-[0-9]+')) datehour
  , REGEXP_EXTRACT(line, '([^ ]*) ') wiki
  , REGEXP_EXTRACT(line, '[^ ]* (.*) [0-9]+ [0-9]+') title
  , CAST(REGEXP_EXTRACT(line, ' ([0-9]+) [0-9]+$') AS INT64) views
  , CAST(REGEXP_EXTRACT(line, ' ([0-9]+)$') AS INT64) zero
  , _FILE_NAME filename
  , line
FROM `fh-bigquery.views.wikipedia_views_gcs`WHERE REGEXP_EXTRACT(line, ' ([0-9]+) [0-9]+$') IS NOT NULL # views
AND REGEXP_EXTRACT(line, ' ([0-9]+)$') = '0' # zero

您可以使用REGEXP_EXTRACT来代替JSON_EXTRACT/JSON_EXTRACT_SCALAR,或者-为了获得最大的灵活性,可以使用JavaScript UDF。