• hive表字段跟字段对应的值转为json数组


    第一种方式 直接用hive 函数实现

    select collect_list(named_struct('id',id,'name',name)) from table  
    
    • 1

    此方式不适用于字段数量过多的情况(比较麻烦)

    第二种方式 写udf 函数

    import org.apache.hadoop.hive.ql.exec.Description;
    import org.apache.hadoop.hive.ql.exec.UDF;
    import org.apache.hadoop.hive.ql.metadata.Table;
    import org.apache.hadoop.hive.ql.metadata.TableNotFoundException;
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    @Description(
        name = "table_to_json_array",
        value = "Converts data from a Hive table to a JSON array.",
        extended = "Example:\n" +
                "  SELECT table_to_json_array('your_table') AS json_array FROM your_table;"
    )
    public class TableToJsonArray extends UDF {
    
        public String evaluate(String tableName) {
            try {
                // 获取 Hive 表对象
                Table table = getTable(tableName);
    
                // 获取表的结构(字段名)
                String[] fieldNames = table.getAllCols().stream().map(column -> column.getName()).toArray(String[]::new);
    
                // 构建查询
                StringBuilder queryBuilder = new StringBuilder();
                queryBuilder.append("SELECT ");
    
                for (int i = 0; i < fieldNames.length; i++) {
                    queryBuilder.append("named_struct('")
                                .append(fieldNames[i])
                                .append("', ")
                                .append(fieldNames[i])
                                .append(")");
    
                    if (i < fieldNames.length - 1) {
                        queryBuilder.append(", ");
                    }
                }
    
                queryBuilder.append(" FROM ")
                            .append(tableName);
    
                // 执行查询
                String query = queryBuilder.toString();
                JSONArray jsonArray = executeQuery(query);
    
                // 返回 JSON 数组
                return jsonArray.toString();
            } catch (TableNotFoundException e) {
                // 处理表不存在的情况
                return null;
            }
        }
    
        // 获取 Hive 表对象
        private Table getTable(String tableName) throws TableNotFoundException {
            // 使用 Hive 元数据获取表对象
            // 这里需要适应你的环境和需求来获取表对象
            // 示例代码省略了实际获取表对象的细节
            throw new TableNotFoundException("Table not found: " + tableName);
        }
    
        // 执行查询并返回结果
        private JSONArray executeQuery(String query) {
            // 在这里执行查询并返回结果的代码,可以使用 Hive 的 JDBC 驱动程序或其他适当的方式执行查询
            // 返回的结果应该是一个 JSON 数组
            // 示例代码省略了实际查询和结果处理的细节
            return new JSONArray(); // 返回空数组作为示例
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    此方式不适用于获取表种某几个字段及字段对应的值的情况

  • 相关阅读:
    Spring Security(十八)--OAuth2:实现授权服务器(上)--环境准备以及骨架代码搭建
    【汇总的汇总】内容索引
    STM32如何将文件放到内部flash里面
    Smurf攻击、Sockstress
    mysql索引、事务、存储引擎
    保姆级k8s集群安装教程
    三层交换机基础(超详细哦!)
    VR数字化线上展馆降低企业投入成本和周期
    Matlab图像处理-灰度直方图
    vue中函数参数传递为undefined
  • 原文地址:https://blog.csdn.net/weixin_44352020/article/details/133071747