Apache Drill:将 JSON as String 转换为 JSON 对象以检索每个元素
Apache Drill: Convert JSON as String to JSON object to retrieve each element
我在 hive table
的一列中有以下字符串,我正在尝试使用 apache drill
:
进行查询
{"cdrreasun":"52","cdxscarc":"20150407161405","cdrend":"20150407155201","cdrdnrar.1un":"24321.70","servlnqlp":"54.201.25.50","men":"42403","xa:lnqruup":"3","cemcau":"120","accuuncl":"21","cdrc:
5","volcuca":"1.7"}
想要使用 apache drill SQL.
检索键 cdrreasun 的所有值
不能在列上使用 FLATTEN,因为它说 Flatten does not work with inputs of non-list types.
不能使用 KVGEN,因为它只适用于 MAP 数据类型。
Drill 的函数 convert_fromJSON 允许从字符串转换为 JSON 对象。有关此功能的更多详细信息和使用示例,请参阅 https://drill.apache.org/docs/data-type-conversion/#convert_to-and-convert_from
对于您指定的示例,您可以运行
convert_fromJSON(colWithJsonText)['cdrreasun']
我弄明白了,希望对其他人有帮助。
如果数据类型是 MAP 类型,我们必须分 3 步完成:
KVGEN() -> FLATTEN() -> convert_from()
如果它是 STRING
类型,则不需要 KVGEN()
函数。
SELECT ratinggrouplist
,t3.cdrlist3.cdrreason AS cdrreason
,t3.cdrlist3.cdrstart AS cdrstart
,t3.cdrlist3.cdrend AS cdrend
,t3.cdrlist3.cdrduration AS cdrduration
FROM (
SELECT ratinggrouplist, convert_from(t2.cdrlist2.`element`, 'JSON') AS cdrlist3
FROM (
SELECT ratinggrouplist ,flatten(t1.cdrlist1.`value`) AS cdrlist2
FROM (
SELECT ratinggrouplist, kvgen(cdrlist) AS cdrlist1
FROM dfs.tmp.SOME_TABLE
) AS t1
) AS t2
) AS t3;
我在 hive table
的一列中有以下字符串,我正在尝试使用 apache drill
:
{"cdrreasun":"52","cdxscarc":"20150407161405","cdrend":"20150407155201","cdrdnrar.1un":"24321.70","servlnqlp":"54.201.25.50","men":"42403","xa:lnqruup":"3","cemcau":"120","accuuncl":"21","cdrc: 5","volcuca":"1.7"}
想要使用 apache drill SQL.
检索键 cdrreasun 的所有值不能在列上使用 FLATTEN,因为它说 Flatten does not work with inputs of non-list types.
不能使用 KVGEN,因为它只适用于 MAP 数据类型。
Drill 的函数 convert_fromJSON 允许从字符串转换为 JSON 对象。有关此功能的更多详细信息和使用示例,请参阅 https://drill.apache.org/docs/data-type-conversion/#convert_to-and-convert_from
对于您指定的示例,您可以运行
convert_fromJSON(colWithJsonText)['cdrreasun']
我弄明白了,希望对其他人有帮助。
如果数据类型是 MAP 类型,我们必须分 3 步完成:
KVGEN() -> FLATTEN() -> convert_from()
如果它是 STRING
类型,则不需要 KVGEN()
函数。
SELECT ratinggrouplist
,t3.cdrlist3.cdrreason AS cdrreason
,t3.cdrlist3.cdrstart AS cdrstart
,t3.cdrlist3.cdrend AS cdrend
,t3.cdrlist3.cdrduration AS cdrduration
FROM (
SELECT ratinggrouplist, convert_from(t2.cdrlist2.`element`, 'JSON') AS cdrlist3
FROM (
SELECT ratinggrouplist ,flatten(t1.cdrlist1.`value`) AS cdrlist2
FROM (
SELECT ratinggrouplist, kvgen(cdrlist) AS cdrlist1
FROM dfs.tmp.SOME_TABLE
) AS t1
) AS t2
) AS t3;