配置单元sql将记录提取为json

jpfvwuh4  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(294)

我在Hive中有一个表,有多个字段。例如

-------------------------------------------------------------
|Primary Key|Attribute 1|Attribute 2|Attribute 3|Attribute 4|
-------------------------------------------------------------

我需要使用hivesql查询表并返回一个嵌入csv格式的json对象。例如:

Primary Key, Attribute 1, {"Primary Key":"", "Attribute 2":"",  "Attribute 2":""}, Attribute 4

我没有任何查询后编程语言将值转换为json格式。我对直接的sql没有问题,只是不知道是否可以使用sql将json对象导出。
非常感谢您的任何意见。

xpcnnkqh

xpcnnkqh1#

我曾经 brickhouse JAR (brickhouse-0.6.0.jar) 为了 JSON 输出来实现这样的效果。这是最好的jar,但是如果我们需要钥匙 JSON 保存 camelcases ,则需要在 to_json(named_struct()) 条款。
你可以在这里读更多关于这个jar的资料。下面是我如何做到这一点的代码片段。

ADD JAR path/to/jar/brickhouse-0.6.0.jar;
CREATE TEMPORARY FUNCTION to_json AS 'brickhouse.udf.json.ToJsonUDF'; 

CREATE TABLE IF NOT EXISTS V2
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ','
LINES TERMINATED BY '\n'
SELECT
    empId,
    to_json(named_struct('camel_case', 1, 'employee_id', employeeId, 'manager_id', msgId, 'org_Id', orgId), true) AS jsonString
FROM 
    employee
WHERE 
    employeeId=101
);

输出如下:

101, {"camelCase" : true, "employeeId" : 101, "managerId" : 201, "orgId" : 301}

我必须处理我必须处理的案子 Array of JSON 需要放在方括号中的元素( [] ). 您可以忽略下面查询中的最外层(即。 SELECT FROM y 使用查询直到 SELECT FROM x )如果你确定你有单身 JSON 每个记录。查询变更处理 Array of JSON .

CREATE TABLE IF NOT EXISTS V2
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ','
LINES TERMINATED BY '\n'
AS 
SELECT 
    y.employeeId, CONCAT('[', y.jsonData, ']') AS jsonData
FROM 
(
    SELECT 
        x.employeeId, collect_list(jsonString) AS jsonData 
    FROM (
    SELECT
    empId,
    to_json(named_struct('camel_case', 1, 'employee_id', employeeId, 'manager_id', msgId, 'org_Id', orgId), true) AS jsonString
    FROM 
        employee
    WHERE 
        employeeId=101
    ) x
    GROUP BY 
        x.employeeId
) y;

输出如下:

101, [{"camelCase" : true, "employeeId" : 101, "managerId" : 201, "orgId" : 301}]

您可以调整此查询以将数据放入 HDFS 直接使用此版本:

INSERT OVERWRITE DIRECTORY '/path/of/target/directory/'
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY ','
LINES TERMINATED BY '\n'AS 
SELECT ...

相关问题