我有一个包含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特有的,因此值得更新问题和标签。
问题内容: 我有从.net应用程序A,B,C,D,E,F获取的字符串, 我想写一个SQL选择语句像 这在t-SQL中将不起作用,因为它使用不将值分开的一个字符串。有什么办法可以做到这一点? 问题答案: 它认为最简单的方法是动态SQL生成:
我的程序中有很多textviews。我希望这些文本视图中的数字以3到3隔开。我应该为任何TextView编写代码吗?有没有一种方法可以编写一次代码并将其用于整个程序?谢谢你。
本文向大家介绍SQL server中字符串逗号分隔函数分享,包括了SQL server中字符串逗号分隔函数分享的使用技巧和注意事项,需要的朋友参考一下 继SQl -Function创建函数数据库输出的结果用逗号隔开,在开发中也有许多以参数的形式传入带逗号字条串参数(数据大时不建议这样做) 例:查找姓名为“张三,李二” 的数据此时在数据库里就要对此参数做处理如图: 函数代码如下 好了,关于sql字符
问题内容: 这个问题已经在这里有了答案 : MySQL:将逗号分隔的列表分成多行 (4个答案) 6年前关闭。 我有一列带有可变数量的逗号分隔值: 我希望结果采用每个值,并创建一行: 如何在SQL(MySQL)中执行此操作? (我曾尝试使用谷歌搜索“内爆”和“侧面视图”,但是这些似乎并没有出现相关问题。所有相关的SO问题都在尝试做更复杂的事情) 问题答案: 您可以使用纯SQL来做到这一点 注意: 诀
问题内容: 我有看起来像这样的数据: 对于每个customer_id,我需要用逗号分隔的列表,以指示该客户运营的月份: 等等。如何使用SQL Server 2005 SQL(而不是T-SQL)轻松生成此逗号分隔的列表? 我在Stack Overflow和其他地方在这里看到的大多数解决方案似乎都是基于联接多个行值而不是列值来创建逗号分隔的列表: T-SQL FOR XML路径(’‘) 关联的子查询与
问题内容: 我有一个这样的表: 我需要一个查询以n分钟的间隔对记录进行分组。 例如,输出(按60分钟分组): 到目前为止,由于间隔介于0到60分钟之间,因此我一直在使用此查询按10分钟间隔进行分组: 但是现在间隔可以是例如 125436758 分钟。 我无法创建新表,并且用户定义的间隔必须为n分钟。我正在使用SQL SERVER2012。谢谢。 问题答案: