首页 > 解决方案 > BigQuery 错误 - 标量子查询产生了多个元素

问题描述

我正在尝试使用以下查询更新 bigquery 中的列。但它正在生成 BigQuery 错误 -标量子查询产生了多个元素,这也专门针对此子查询(Select * from unnest(array(Select to_json_String(JSON_EXTRACT_SCALAR(c.raw,'$.C360ServiceError.serviceName'),true ) from tableabc as c where c.trace_id=a.trace_id). 你能帮忙吗

完整的查询是:-

UPDATE tableabca SET a.Link=CONCAT("a",(Select split(TopicName, '/')[OFFSET(1)] from tableabc As b where b.trace_id=a.trace_id ), 'String abc', (Select split(TopicName, '/')[OFFSET(1)] from tableabc As b where b.trace_id=a.trace_id ),'""', 'String def', ((Select * from unnest(array(Select to_json_String( JSON_EXTRACT_SCALAR(c.raw,'$.C360ServiceError.serviceName'),true) from tableabc as c where c.trace_id=a.trace_id)))), '"%0A"') WHERE DATE(a.logDate) 介于 CURRENT_DATE ("Asia/Kolkata")-3 和 CURRENT_DATE("Asia/Kolkata")

标签: google-cloud-platformgoogle-bigquery

解决方案


UNNEST 函数返回多个值,这是不允许的,我相信因为您正在取消嵌套数组,根据我的经验,对表使用 unnest 然后使用数组以避免错误。

试试下面的,现在请告诉我结果。

UPDATE tableabc a
SET    a.link=concat("a",
       (
              SELECT Split(topicname, '/')[OFFSET(1)]
              FROM   tableabc AS b
              WHERE  b.trace_id=a.trace_id ), 'String abc',
       (
              SELECT Split(topicname, '/')[OFFSET(1)]
              FROM   tableabc AS b
              WHERE  b.trace_id=a.trace_id ),'""', 'String def', (
       (
              SELECT *
              FROM   array
                     (
                            select to_json_string(json_extract_scalar(c.raw,'$.C360ServiceError.serviceName'),true)
                            FROM   (unnest tableabc AS c WHERE c.trace_id=a.trace_id)))), '"%0A"')
WHERE  date(a.logdate) BETWEEN CURRENT_DATE("Asia/Kolkata")-3 AND    CURRENT_DATE("Asia/Kolkata")

问候 :)


推荐阅读