【问题标题】:How to lateral flatten a varchar column which is not in an array format in snowflake如何横向展平雪花中不是数组格式的varchar列
【发布时间】:2020-02-09 11:12:21
【问题描述】:

我正在尝试将 varchar 横向展平为数组以爆炸数组中的元素

例如 [trJGrODW4n4iLRN2A4WeraV740vH4L81ikd7KnRfsD bE578vR4L81isq7YnRchM]

我尝试了以下方法:

  1. 我尝试将 varchar 空间 替换为 ,"(不起作用)。
  2. Used strtok_to_array --> 获取字符串的 unicode 开头
 Select s.value, replace(varchar_col,' ',',"') as to_array_format,
strtok_to_array(varchar_col,'')as strtok_to_array,* from table , lateral flatten(input => strtok_to_array(varchar_col,''))s

实际结果:

1. trJGrODW4n4iLRN2A4WeraV740vH4L81ikd7KnRfsD bE578vR4L81isq7YnRchM
2. [ "trJGrODW4n4iLRN2A4Wer\u0002aV740vH4L81ikd7KnRfsD\u0002bE578vR4L81isq7YnRchM" ]

预期结果:

1. ["trJGrODW4n4iLRN2A4Wer","aV740vH4L81ikd7KnRfsD","bE578vR4L81isq7YnRchM"]
2. ["trJGrODW4n4iLRN2A4Wer","aV740vH4L81ikd7KnRfsD","bE578vR4L81isq7YnRchM"]

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    从您获得的输出来看,您的数据似乎包含空字节。如果要将字符串拆分为以空字节为边界的数组,可以使用

    strtok_to_array(varchar_col,hex_decode_string('00'))

    hex_decode_string 将十六进制编码的字符串作为输入,传递 '00' 返回一个空字节,然后我们将其用作分隔符。

    【讨论】:

    • 感谢您的回复,这仍然可以解决我仍然遇到的问题 [“trJGrODW4n4iLRN2A4Wer\u0002aV740vH4L81ikd7KnRfsD\u0002bE578vR4L81isq7YnRchM”]
    • \u0002 告诉你你“不想要”的“价值”是 0002,这表明 strtok_to_array(varchar_col,hex_decode_string('02')) 应该涵盖你的用例。
    猜你喜欢
    • 2020-06-17
    • 2016-08-16
    • 2020-03-24
    • 2019-08-10
    • 2021-08-16
    • 2021-04-25
    • 2020-09-12
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多