Json 在红移中拆分varchar列

Json 在红移中拆分varchar列,json,amazon-redshift,Json,Amazon Redshift,我有一个表sales,其中所有列的数据类型都是varchar Name items Dave {"item1": {"product": apple, "cost": 120}, "item2": {"product": orange, "cost": 80}} Nick Jack {"item1": {

我有一个表sales,其中所有列的数据类型都是varchar

 Name           items 
 Dave    {"item1": {"product": apple, "cost": 120}, "item2": {"product": orange, "cost": 80}}
 Nick      
 Jack    {"item1": {"product": melon, "cost": 100}, "item2": {"product": berries, "cost": 240}}
我的目标是使用SELECT语句拆分列项目,如下所示

Name    items1_product   items1_cost  items2_product  items2_cost 
 Dave        apple            120        orange           80     
 Nick     
 Jack        melon            100        berries         240
我试图通过“selectitems::jsonbfromsales”将items的数据类型转换为Json,但我发现错误,类型“JSONB”不存在


我们还有其他方法可以实现这一点吗?

红移没有本机json数据类型,但它有json解析函数。“items”列中存储的是文本,而不是json。要从这个json文本中提取元素,您可以使用红移json内置函数,您可以在这里了解这些函数-

因此,要为每个人提取item1的产品名称,您可以:

select select json_extract_path_text(items, 'item1', 'product') as items1_product from <table>;
选择select json\u extract\u path\u text(项目,'item1','product')作为项目1\u product from;

现在您的json看起来格式不正确,因为单词“apple”是一个字符串值,应该被引用。我想这只是在为你的问题编写示例时的疏忽。如果情况并非如此,并且您需要进行一些json清理,则可以使用is_valid_json()函数来确保表json数据在尝试解析之前是正确的。

如果您获得的是“type”jsonb“not exist”,则您使用的是不受支持的Postgres版本。但转换为json至少应该有效。什么是
选择版本()向您展示?i686 pc linux gnu上的PostgreSQL 8.0.2,由GCC GCC(GCC)3.4.2 20041017(Red Hat 3.4.2-6.fc3)编译,Redshift 1.0.22169您没有使用PostgreSQL,您使用的是Amazon Redshift-这是两个截然不同的产品。