我在athena中使用CTAS创建了一个新表,除了原始表中的json字符串(未定义为struct
)之外,一切都正常。
它是
"screen_orientation":"{"angle":"0"}",
现在变为:
"screen_orientation":"{\"angle\":\"0\"}",
CTAS的声明非常直接:
CREATE TABLE destination_table
WITH (
format='JSON',
partitioned_by=ARRAY['partition_date'],
write_compression='GZIP'
)
AS
SELECT * FROM src_table
源列的类型为string
。
有什么方法可以防止这种情况发生吗?由于权限问题,我无法重新定义源表的列定义。
2条答案
按热度按时间vc9ivgsu1#
这是Athena中预期的行为。例如,如果我运行下面的查询,在那里我将字符串转换为JSON,那么双引号将被反斜杠(\)转义。
SQL语句:
输出:
但您始终可以通过使用
json_format
函数来解决此问题,如下所示:SQL语句:
输出:
因此,您可以在CTAS语句中将
json_format
添加到您的select查询中,这不会嵌入这些反斜杠。vawmfj5a2#
如果你的json是一个字符串,你也可以使用
json_parse
: