我有一个包含JSON对象的表。每个JSON对象在方括号中均包含一个数组,并用逗号分隔。
如何使用SQL访问方括号数组中的任何元素,例如“ Matt”?
{"str":
[
1,
134,
61,
"Matt",
{"action.type":"registered","application":491,"value":423,"value2":12344},
["application"],
[],
"49:0"
]
}
我在Hadoop上使用“ Hive”。如果您知道如何在SQL中执行此操作,那很好:)
您可以在Hive中执行以下操作:
首先,您需要一个JSON SerDe(Serializer /
Deserializer)。我见过的最实用的功能是https://github.com/rcongiu/Hive-JSON-
Serde/
。彼得·桑考斯卡斯(Peter
Sankauskas)的SerDe似乎无法处理这种复杂的JSON。在撰写本文时,您将需要使用Maven编译SerDe,并将JAR放在您的Hive会话可以到达的位置。
接下来,您将需要更改JSON格式。原因是Hive对数组采用强类型的视图,因此混合整数和其他内容将无效。考虑切换到这样的结构:
{"str": {
n1 : 1,
n2 : 134,
n3 : 61,
s1: "Matt",
st1: {"type":"registered","app":491,"value":423,"value2":12344},
ar1: ["application"],
ar2: [],
s2: "49:0"
} }
接下来,您需要将JSON放在一行中。我不确定这是Hive还是SerDe的怪癖,但您需要这样做。
然后将数据复制到HDFS。
现在,您可以定义一个表并查询了:
ADD JAR /path/to/jar/json-serde-1.1.2-jar-with-dependencies.jar;
CREATE EXTERNAL TABLE json (
str struct<
n1 : int, n2 : int, n3 : int,
s1 : string,
st1 : struct < type : string, app : int, value : int, value2 : int>,
ar1 : array<string>,
ar2 : array<string>,
s2 : string
>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/hdfs/path/to/file';
通过此操作,您可以运行有趣的嵌套查询,例如:
select str.st1.type from json;
最后但并非最不重要的一点是,由于这是Hive特有的,因此值得更新问题和标签。
问题内容: 我一直非常依赖CSS来开发我正在工作的网站。现在,所有CSS样式都在每个标记的基础上应用,因此现在我尝试将其移至更多外部样式中,以帮助将来进行任何更改。 但是现在的问题是,我注意到我遇到了“ CSS爆炸”。对我来说,决定如何最好地组织和抽象CSS文件中的数据变得越来越困难。 我正在从大量基于表格的网站中使用网站中的大量标签。因此,我得到了许多如下所示的CSS选择器: 还算不错,但是作为
问题内容: 我想从包含单词列表的DataFrame转换为每个单词都在其自己行中的DataFrame。 如何在DataFrame中的列上爆炸? 这是我尝试的一些示例,您可以在其中取消注释每个代码行并获取以下注释中列出的错误。我在带有Spark 1.6.1的Python 2.7中使用PySpark。 请指教 问题答案: 和是SQL函数。两者都在SQL上运行。将Java正则表达式作为第二个参数。如果要在
描述 (Description) &可以在逗号分隔的列表中生成所有可能的选择器排列。 例子 (Example) 以下示例演示了如何使用&生成LESS文件中所有可能的选择器排列 - <html> <head> <link rel = "stylesheet" href = "style.css" type = "text/css" /> <title>Combinato
问题内容: 下面是表2中的数据 我可以使用以下查询来爆炸以上数据,并且对于以上数据也可以正常工作- 这样我会得到很好的输出 但是在某些情况下,我在下表中有这样的数据,对于相同的product_id- 我需要使用HiveQL查询为上述数据输出类似的结果- 这有可能做到这一点吗? 任何建议将不胜感激。 PS我几天前问这个问题,但是在这种情况下,数据是不同的,现在数据完全不同了,我需要类似的输出。 问题
我正在使用Spark SQL(我提到它是在Spark中,以防影响SQL语法-我还不太熟悉,还不能确定),我有一个表,我正在尝试重新构造,但我在尝试同时转置多个列时遇到了麻烦。 基本上,我有看起来像这样的数据: 并且我想同时分解varA和varB(长度将始终保持一致) - 因此最终输出如下所示: 但是我似乎只能让一个explee(var)语句在一个命令中工作,如果我尝试链接它们(即在第一个分解命令之
我一直在努力研究如何使用maven overlay插件将项目排除在爆炸战争之外。 我有以下内容: xml和applicationcontext.xml可以很好地排除,但它们位于:${basedir}/src/main/webapp/web-inf/下 无论我尝试什么,这些文件是静止的,覆盖,尽管排除。