【发布时间】:2021-09-21 04:36:29
【问题描述】:
我有一个名为 sampleTable 的表,其值是这样的(请注意,列最多可以达到 key100,说明了一个小示例,以降低示例的复杂性)。
select * from sampleTable;
| key1 | key2 |
|---|---|
| 1111 | 2222 |
我正在尝试生成一个查询,该查询创建一个 JSON 字符串,该字符串可以将这些列值包含到每行一个 JSON 字符串,如下面提到的格式。
'{"keys":{"key1":"1111", "key2":"2222"}}'
通过 presto 查询的正确方法是什么? 我的尝试如下:
尝试 1
select
concat('{"keys":{"key1": ', a.key1, ',',
'{"key2": ' ,a.key2, '}}')
AS keyJson
from sampleTable ;
尝试 2
select
replace(
replace('{"keys":{"key1": $key1, "key2": $key2}}','$key1',d.key1),
'$key2',d.key2 )
AS keyJson
from sampleTable ;
考虑到密钥可以从 key1 变为 key100,有没有更简单的方法可以做到这一点。对于上下文,我从 java 程序动态生成查询。在存在多个键的情况下,在这两种情况下使用 StringBuilder 方法附加字符串变得复杂。
【问题讨论】:
-
JSON 操作应由appropriate JSON 函数或强制转换执行。手动字符串连接是一种充满错误的方式
-
@astentx 我同意。我面临的问题是我不是在处理纯字符串,而是希望将 json 中的参数值替换为列名。您能否建议如何使用提到的 JSON 操作来执行此操作。