Athena CTAS将json保存为字符串,并转义特殊字符

cig3rfwq  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(160)

我在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
有什么方法可以防止这种情况发生吗?由于权限问题,我无法重新定义源表的列定义。

vc9ivgsu

vc9ivgsu1#

这是Athena中预期的行为。例如,如果我运行下面的查询,在那里我将字符串转换为JSON,那么双引号将被反斜杠(\)转义。
SQL语句:

WITH dataset AS (
  SELECT
    CAST('{"test": "value"}' AS JSON) AS hello_msg
)
SELECT * FROM dataset

输出:

但您始终可以通过使用json_format函数来解决此问题,如下所示:
SQL语句:

WITH dataset AS (
  SELECT
  json_format(JSON '{"test": "value"}' ) as hello_msg
)
SELECT * FROM dataset

输出:

因此,您可以在CTAS语句中将json_format添加到您的select查询中,这不会嵌入这些反斜杠。

vawmfj5a

vawmfj5a2#

如果你的json是一个字符串,你也可以使用json_parse

WITH dataset AS (
  SELECT
  json_parse('{"test": "value"}') as hello_msg
)
SELECT * FROM dataset

相关问题