代码之家  ›  专栏  ›  技术社区  ›  Nk.Pl

当转换为字符串时,配置单元保留结构符号

  •  0
  • Nk.Pl  · 技术社区  · 6 年前

    我将从一个例子开始,帮助阐明我的需求。

    我有一张桌子叫 schema1.base_tbl 包含一个名为 col_nm_1 样本数据如下:

    col_nm_1
    abc1234
    abc5678
    def1234
    

    我创建了另一个名为 schema1.tbl_dv1 就像这样:

    CREATE TABLE schema1.tbl_dv1 row format delimited fields terminated by '|' stored as textfile as 
    SELECT
        struct(col_nm_1)
    FROM schema1.base_tbl;
    

    查询时的表结果 select * from schema1.tbl_dv1

    c0
    {"col1":"abc1234"}
    {"col1":"abc5678"}
    {"col1":"def1234"}
    

    我创建了另一个表,这次是一个外部表来获取数据 方案1。tbl_dv1 :

    CREATE EXTERNAL TABLE IF NOT EXISTS schema1.tbl_dv2
    (col_data string)
    row format delimited fields terminated by '|' stored as textfile
    LOCATION
    'maprfs:/data/tbl_dv2';
    
    INSERT INTO schema1.tbl_dv1(col_data) SELECT c0 FROM schema1.tbl_dv1;
    

    查询时的表结果 select * from schema1.tbl_dv2

    col_data
    abc1234
    abc5678
    def1234
    

    这不是我预期的结果。我想要的结果应该包含Struct data type创建的所有标记,即expect result:

    col_data
    {"col1":"abc1234"}
    {"col1":"abc5678"}
    {"col1":"def1234"}
    

    在目录中查看配置单元的部件文件时,它也应该与上面的结果类似。

    我知道这是关于配置单元字符串类型与配置单元结构类型的比较,我想知道是否有任何方法可以转换查询包含插入字符串类型的所有标记的结构类型列的结果?

    2 回复  |  直到 6 年前
        1
  •  0
  •   serge_k    6 年前

    可以使用以下命令将struct转换为Json字符串: brickhouse 第三方蜂巢UDF。是的 to_json 函数,可以将任何复杂类型转换为json字符串。首先,克隆并构建jar:

    git clone https://github.com/klout/brickhouse.git
    cd brickhouse
    mvn clean package
    

    然后将Brickhouse jar复制到HDFS,并将jar添加到Hive中:

    add jar hdfs://<your_path>/brickhouse-0.7.1-SNAPSHOT.jar;
    

    登记 给_json 蜂巢中的UDF

    create temporary function to_json as 'brickhouse.udf.json.ToJsonUDF';
    

    现在你可以使用它了,例如。,

    hive> select to_json(ARRAY(MAP('a',1), MAP('b',2)));
    OK
    [{"a":1},{"b":2}]
    
        2
  •  0
  •   Nk.Pl    6 年前

    仔细查看Stackoverflow,我发现这可能是解决方案:

    hive -e "select * from schema1.tbl_dv1" > ~/json_output.txt;
    

    它保留了结构标记。