我正在使用org.apache.hive.hcatalog.data.JsonSerDe
从json格式将数据加载到athena。目前,我使用struct<...>
或array<...>
指定对象和列表,但目标是在最终的镶木地板表中使用varchar
或string
类型。这样我就可以将它保持为JSON格式,但使用string/varchar类型。
你能建议一些好的方法吗?
转换为json,然后转换为varchar对我来说不起作用:
CREATE TABLE new_table AS SELECT cast(my_struct_col as varchar) my_struct_col FROM (
SELECT cast(my_struct_col as JSON) my_struct_col FROM raw_table
)
使用json_format
将json转换为varchar:
json_format(json)
→varchar
返回从输入JSON值序列化的JSON文本。这是json_parse()
:的反函数
SELECT json_format(JSON '[1, 2, 3]'); -- '[1,2,3]'
SELECT json_format(JSON '"a"'); -- '"a"'
注意,Presto中ROW
的json表示只是一个数组-Presto不保留列名info:
SELECT CAST(CAST(ROW(123, 'abc', true)
AS ROW(v1 BIGINT, v2 VARCHAR, v3 BOOLEAN)) AS JSON);
-- JSON '[123,"abc",true]'
Trino对此进行了更改(Athena版本3的引擎应该基于此(:
SELECT CAST(CAST(ROW(123, 'abc', true) AS
ROW(v1 BIGINT, v2 VARCHAR, v3 BOOLEAN)) AS JSON);
-- JSON '{"v1":123,"v2":"abc","v3":true}'