如何使用雪花object_construct函数而不是按键排序来维护元素的顺序?

问题描述

以下雪花查询返回JSON结构,但输出按键排序。如何不按键排序却保留顺序?是否需要设置任何参数设置?

select
object_construct
(
  'entity','XYZ','allowed','Yes','currency','USD','statement_month','July,2020'
 )

输出:-按键排序

{
  "allowed": "Yes","currency": "USD","entity": "XYZ","statement_month": "July,2020"
}

预期输出:-与指定顺序相同

{
  "entity": "XYZ","allowed": "Yes",2020"
}

解决方法

JSON是名称和值的无序集合。无法使用JSON保证订单。

构造的对象不一定保留键-值对的原始顺序。

您可以按照以下方式进行操作

SELECT mytable:entity::string as entity,mytable:allowed::string as allowed,mytable:currency::string as currency,mytable:statement_month::string as statement_month
from
(select
object_construct
(
  'entity','XYZ','allowed','Yes','currency','USD','statement_month','July,2020'
 ) mytable);
,

不幸的是,没有

使用说明: https://docs.snowflake.com/en/sql-reference/functions/object_construct.html#usage-notes

构造的对象不一定保留键-值对的原始顺序

与PARSE_JSON用法说明相同: https://docs.snowflake.com/en/sql-reference/functions/parse_json.html#usage-notes

由TO_JSON生成的字符串中的键值对的顺序是不可预测的。