2017-10-13 4 views
1

J'ai une table dans redshift dans laquelle une colonne est un objet sérialisé PHP. Je veux utiliser les fonctions de chaîne redshift et désérialiser la colonne et créer une autre table temporaire avec les valeurs désérialisées. par exemple: la table initiale ressembleraitDéserialiser l'objet php dans redshift amazon en utilisant les fonctions de chaîne

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

La table temporaire de sortie prévue pour un traitement ultérieur est:

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

Comment puis-je utiliser les fonctions de chaîne redshift désérialiser cet objet ?

Répondre

2

pour votre cas particulier, il fonctionnerait comme ceci:

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),'"'); 

s'il peut y avoir d'autres formats de cette structure cela ne va pas travailler

0

La solution que je suis venu avec:

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