json文件到hive外部表

时间:2017-08-15 11:34:42

标签: json hive hive-serde

我有json格式的数据。

  1. 正确
  2. [{ “文本”: “foo0”, “号码”:123},{ “文本”: “foo1”, “号码”:345},{ “文本”: “foo2的”, “号码”:678 },{ “文”: “foo3”, “号码”:901}]

    1. 不正确
    2. { “文本”: “foo0”, “号码”:123} { “文本”: “foo1”, “号码”:345} { “文”: “foo2的”, “号码”:678} { “文本”: “foo3”, “号码”:901}

      创建外部表

      create external table js_test_3
      (
        text string,
        number string
      )
      ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
      LOCATION '/Serde'
      

      然后我发起

      select *
      from js_test_3
      

      结果我得到了

      1. 为json更正(检索与行数一样多的元素)
      2. 文字编号

        {“number”:“123”,“text”:“foo0”} {“number”:“345”,“text”:“foo1”}

        1. 对于不正确的json-(仅检索第一个元素)
        2. 文字编号

          foo0 123

          我应该如何编写创建结果正确的列表的脚本?

          文字编号

          foo0 123

          foo1 345

          foo2 678

          foo3 901

          由于

1 个答案:

答案 0 :(得分:0)

您正在使用的JsonSerDe期望输入一个文件,每行有一个完整的JSON。这是可取的,因为它能够在CR / LF上拆分输入(并在工作节点之间划分工作)。

如果你有一个格式正确的JSON列表,就像你在"正确的JSON"例如,您可以使用jq之类的工具将输入文件转换为预期的格式。例如:

jq -c .[] correct.json > /serde-input.txt