Json 在红移中拆分varchar列
我有一个表sales,其中所有列的数据类型都是varcharJson 在红移中拆分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": {
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-这是两个截然不同的产品。