【发布时间】:2023-04-07 06:27:01
【问题描述】:
我有一个数据类型为:varchar 的列。在此列中,有几条记录似乎是“数组格式”的意思,它以蓝色突出显示,我可以单击它以查看更多“详细信息”。其他记录只是 varchar/string 类型(当我点击这些时,我没有看到“详细信息”弹出窗口。
有没有办法可以识别这些似乎是数组格式的记录?
【问题讨论】:
标签: sql snowflake-cloud-data-platform snowflake-schema
我有一个数据类型为:varchar 的列。在此列中,有几条记录似乎是“数组格式”的意思,它以蓝色突出显示,我可以单击它以查看更多“详细信息”。其他记录只是 varchar/string 类型(当我点击这些时,我没有看到“详细信息”弹出窗口。
有没有办法可以识别这些似乎是数组格式的记录?
【问题讨论】:
标签: sql snowflake-cloud-data-platform snowflake-schema
如果该列被定义为 VARCHAR 并且它在 Web UI 中以蓝色返回,这是因为它是多行的,而不是因为其中的某些东西看起来像一个数组。
例如,这个单行 VARCHAR 将返回黑色:
select '[1,2,3]'; -- Returns in black
但是,这个非数组字符串显示为蓝色,因为它是多行的:
select 'Hello\nworld'; -- Returns in blue.
当您单击蓝色列时,您可以看到更多行。这就是为什么它们以蓝色返回,以确定哪些可以被点击以获得更多行。
如果您的带有数组的 VARCHAR 以这种方式显示,可能是因为它们是多行的。
【讨论】:
要识别列是否为非数组类型,您可以使用 IS_ARRAY,它需要一个 VARIANT 类型:
SELECT IS_ARRAY('["1", "2"]'::VARIANT) as is_array;
+----------+
| IS_ARRAY |
|----------|
| False |
+----------+
SELECT IS_ARRAY(PARSE_JSON('["1", "2"]')::VARIANT) as is_array;
+----------+
| IS_ARRAY |
|----------|
| True |
+----------+
SELECT IS_ARRAY(PARSE_JSON('{"1": "2"}')::VARIANT) as is_array;
+----------+
| IS_ARRAY |
|----------|
| False |
+----------+
-- you can use TRY_PARSE_JSON in case you do not know the format of the data
-- if it fails, it will return NULL, and IS_ARRAY on NULL will be NULL too
SELECT IS_ARRAY(TRY_PARSE_JSON('{"1: "2"}')::VARIANT) as is_array;
+----------+
| IS_ARRAY |
|----------|
| NULL |
+----------+
https://docs.snowflake.com/en/sql-reference/functions/is_array.html
【讨论】: