1

我有 json 格式的数据。

  1. 正确的

[{"text":"foo0","number":123},{"text":"foo1","number":345},{"text":"foo2","number":678},{ “文本”:“foo3”,“数字”:901}]

  1. 不正确

{"text":"foo0","number":123}{"text":"foo1","number":345} {"text":"foo2","number":678}{"text": “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 更正(检索与行一样多的元素)

文字编号

{"number":"123","text":"foo0"} {"number":"345","text":"foo1"}

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

文字编号

富0 123

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

文字编号

富0 123

富1 345

foo2 678

foo3 901

谢谢

4

1 回答 1

0

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

如果您有一个格式正确的 JSON 列表,就像您在“正确的 JSON”示例中显示的那样,您可以使用类似的工具jq将您的输入文件转换为预期的格式。例如:

jq -c .[] correct.json > /serde-input.txt
于 2017-08-15T14:18:26.403 回答