将包含重复字段的结果集保存到目标表

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结果集字段存储到单独的数组变量中?

SQL语句对返回的结果集里的字段再进行条件查询,在一个结果集显示

sql 显示重复记录数

SQL存储过程多个结果到临时表中

Oracle减少字段重复的结果集

外键返回空结果集