BigQuery:SPLIT() 返回错误

Posted

技术标签:

【中文标题】BigQuery:SPLIT() 返回错误【英文标题】:BigQuery: error in SPLIT() returns 【发布时间】:2017-06-29 15:05:15 【问题描述】:

我在 BigQuery 中有一个表 TabA,它有一列 ColA,列 ColA 具有以下结构

1038627|21514184

表 TabA 有超过一百万条记录。我用this拆分成多列

SELECT ColA,FIRST(SPLIT(ColA, '/')) part1,
       NTH(2, SPLIT(ColA, '/')) part2
FROM TabA

但由于某种原因,在某些行之后,拆分似乎无法正常工作。

我们正在获得这样的记录,

     ColA            part1   part2
1038627|21507470    1038627 21507470     
1038627|21534857    1038627 21507470     
1038627|21546455    1038627 21507470     
1038627|21577167    1038627 21507470

这是随机发生的。不知道哪里有错误。

SELECT COUNT(*) FROM TabA - 返回 170 万条记录


选择 ColA,FIRST(SPLIT(ColA, '|')) 第 1 部分, NTH(2, SPLIT(ColA, '|')) part2 FROM TabA - 返回 170 万条错误拆分的记录


SELECT FIRST(SPLIT(ColA, '|')) 第 1 部分, NTH(2, SPLIT(ColA, '|')) part2 FROM TabA - 仅返回正确拆分的 1.4L 记录

不知道到底发生了什么……是数据的问题还是拆分的问题??

任何帮助将不胜感激。提前致谢!!

【问题讨论】:

您必须使用旧版 SQL 吗?我强烈建议您使用Standard Version,因为在那里解决这个问题非常简单。 【参考方案1】:

是数据的问题还是拆分的问题??

为了帮助进行故障排除 - 我建议在 BigQuery 标准 SQL 中运行相同的逻辑

#standardSQL
SELECT 
  ColA,
  SPLIT(ColA, '|')[SAFE_OFFSET(0)] AS part1,
  SPLIT(ColA, '|')[SAFE_OFFSET(1)] AS part2
FROM TabA

【讨论】:

标准 SQL 语法引发错误。我是标准 SQL 的新手...请您帮忙 非常感谢@mikhail-berlyant 的帮助。我用谷歌搜索了几下,才知道我使用的语法是错误的。后来我更正了。它现在正在工作..但问题是我只得到了 190 万条记录......其中记录的总数是 1799 万条记录......知道为什么即使在标准 SQL 中也会发生这种情况......拆分工作正常...但记录数比实际记录少得多。

以上是关于BigQuery:SPLIT() 返回错误的主要内容,如果未能解决你的问题,请参考以下文章

Cloud Dataflow 中的“辅助输入”是不是支持从 BigQuery 视图中读取?

BigQuery INSERT DML 语句限制

查找要插入 BigQuery 的列名

在bigquery中以编程方式更新/插入数据

如何关联多个 BigQuery 数组字段?

Bigquery:检查流期间的重复项