使用字符串函数反序列化亚马逊红移中的 php 对象

Posted

技术标签:

【中文标题】使用字符串函数反序列化亚马逊红移中的 php 对象【英文标题】:Deserialize php object in amazon redshift using string functions 【发布时间】:2017-10-13 04:31:45 【问题描述】:

我有一个红移表,其中一列是 php 序列化对象。我想使用红移字符串函数并反序列化列并使用反序列化值制作另一个临时表。 例如: 初始表看起来像

| col A | |a:1:i:145;s:2:"14"; | |a:1:i:145;s:2:"15"; | |a:1:i:145;s:2:"16"; |

进一步处理的预期输出临时表是:

| Col A | Col B | | 145 | 14 | | 145 | 15 | | 145 | 16 |

如何使用红移字符串函数来反序列化这个对象?

【问题讨论】:

【参考方案1】:

对于您的特定情况,它会像这样工作:

select 
 split_part(split_part('a:1:i:145;s:2:"14";',':',4),';',1)
,trim(split_part(split_part('a:1:i:145;s:2:"14";',':',6),';',1),'"');

如果这种结构可以有其他格式,这将不起作用

【讨论】:

【参考方案2】:

我想出的解决方案:

SELECT REGEXP_SUBSTR(SPLIT_PART(VALUE,';',1),'[^:]*$') as fieldName1, trim('"' FROM REGEXP_SUBSTR(SPLIT_PART(VALUE,';',2),'[^:]*$')) as fieldName2;

【讨论】:

以上是关于使用字符串函数反序列化亚马逊红移中的 php 对象的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊红移中的 SQL 正则表达式 substr 函数

如何从亚马逊红移中的字符串中删除非数字字符(句号“。”除外)

查询以获取亚马逊红移中给定日期到 48 小时内的数据

从亚马逊红移中选择最大嵌套 ID

红移中的 PERCENTILE_CONT()

红移中的 REGEXP_REPLACE