我正在尝试生成包含统一目录信息的 JSON。我想要的输出是:
table_name : {
column1 : {
type: column1type
},
column2 : {
type: column2type
},
column3: {
type: column3type
},
…
}
我尝试了以下 SQL:
WITH column_metadata AS (
SELECT
COLUMN_NAME,
DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_name'
)
SELECT
TO_JSON(
MAP(
COLLECT_LIST(
MAP(
COLUMN_NAME,
TO_JSON(MAP('type', DATA_TYPE))
)
)
)
) AS json_result
FROM column_metadata
当我运行上述 SQL 时,出现以下错误:
[INVALID_OPTIONS.NON_MAP_FUNCTION] Invalid options: Must use the `map()` function for options.
由于我在每个 TO_JSON
函数中使用 MAP
,为什么会发生此错误?
最佳答案
您可以使用任何一个查询来获取列名称和类型。
SELECT
to_json(
MAP(
'table_name',
collect_list(MAP(COLUMN_NAME,MAP('type', DATA_TYPE))
)
)
) AS json_result
FROM column_metadata
输出:
或者
SELECT
to_json(
MAP(
'table_name',
collect_list(struct(COLUMN_NAME,DATA_TYPE)
)
)
) AS json_result
FROM column_metadata
输出:
这里我没有使用map
,而是使用了struct
,它使用列名称创建结构类型数据。
关于azure - 使用 SQL 生成自定义 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77099113/