CAST数组或结构作为字符串



我正在使用org.apache.hive.hcatalog.data.JsonSerDe从json格式将数据加载到athena。目前,我使用struct<...>array<...>指定对象和列表,但目标是在最终的镶木地板表中使用varcharstring类型。这样我就可以将它保持为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}'

相关内容

  • 没有找到相关文章

最新更新