将包含重复字段的结果集保存到目标表
Posted
技术标签:
【中文标题】将包含重复字段的结果集保存到目标表【英文标题】:Save a result set containing repeated field to a destination table 【发布时间】:2014-11-14 15:17:05 【问题描述】:我想将以下查询的结果集保存到一个表中。
SELECT
g, NEST(x) AS a
FROM
(SELECT 1 AS g, 10 AS x), (SELECT 1 AS g, 20 AS x), (SELECT 1 AS g, 30 AS x),
(SELECT 2 AS g, 100 AS x), (SELECT 2 AS g, 200 AS x)
GROUP BY g
我使用带有“如果为空则写入”、“允许大结果:是”、“扁平化结果:否”和“查询优先级:交互式”选项的网络查询编写器。我不想展平查询结果。
查询失败:“错误:意外。请重试。”
当我使用以下架构创建表并选择“附加到表”选项时,我收到了同样的错误。
"fields": [
"name": "g",
"type": "integer"
,
"name": "a",
"type": "integer",
"mode": "repeated"
]
感谢您的任何建议。
【问题讨论】:
我现在正在研究这个。甚至作为案例添加到付费企业支持中,但尚未收到任何答复。 【参考方案1】:这是 NEST
函数和 flattenResults
设置为 false 的已知问题:两者目前不兼容。我们想解决这个问题,但我没有预计到达时间,因为根本问题很重要。
如果您有一个包含重复字段的现有表,您应该能够成功地将其 SELECT
并将其作为重复字段输出,并将 flattenResults
设置为 false。
【讨论】:
我们希望将具有RECORD
类型列的表转换为另一个表。来自record1.timestamp
的东西应该移动到record2.timestamp
(我们不再需要record1.timestamp
)如何处理这种查询/目标表?
我认为当前不支持使用非展平结果更改记录名称或字段的父记录。不过,我们确实有长期计划在未来推出对此类模式转换的支持。
@DannyKitt 我完全理解你答案的第一段。我不确定第二段。目前有没有办法将包含两行 "p": 1, "a": 10
、"p": 1, "a": 20
的表转换为包含一行 "p": 1, "a": [10, 20]
的重复字段的表?
@Nathan 鉴于NEST
不起作用,我认为没有办法对整数字段执行此操作。但这里有一个字符串的解决方法:select a, SPLIT(GROUP_CONCAT(b), ',') from (select 'z' as a, 'y' as b), (select 'z' as a, 'x' as b) group by a;
@DannyKitt 假设我们现在想要拥有这些,并且我们已经运行了一个生产应用程序,我们有哪些选择?以上是关于将包含重复字段的结果集保存到目标表的主要内容,如果未能解决你的问题,请参考以下文章
java - 如何使用java将sql结果集字段存储到单独的数组变量中?