google-cloud-platform - 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 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 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")
解决方案
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")
问候 :)
推荐阅读
- java - ArgumentMatchers.refEq() 通过将“null”参数传递给注释为 @NotNull 的参数来提高
- typescript - 无法导入 Apollo 解析器
- angular - 仅在 Azure CI 上的 X 超时前断开连接重新连接失败
- varnish - varnish vcc模块如何将vcl编译成C代码?
- spring-boot - 使用带有手动计数器增量的千分尺计时器
- python - 如何在 for 循环中引用与另一列相关的列
- r - 增强的 Dickey-Fuller 检验结果
- windows - WIndows 上的 Puppet:仅当注册表项存在(不)时才创建资源
- javascript - 未捕获的错误:找不到 react-redux 上下文值;请确保组件包装在 <Provider>
- html - 邮件模板 magento 中的 div 断表