如何在Presto中从列提取指定值?附数据示例与期望输出
实现思路解答
我有两列数据:
col1: Adam Smith col2: [{"productId":"328608","invoiceId":"16150101","productType":"car"}]需要查询得到如下结果:
col1: Adam Smith ProductId: 328608请问有可行的实现思路吗?感谢。
当然有可行的思路啦!得看你用什么工具处理这些数据,我给你整理了几种常见场景的实现方式:
1. 数据库中直接处理(主流数据库都支持)
如果你的数据存在数据库里(比如MySQL、PostgreSQL),可以直接用数据库的JSON解析函数来提取:
- MySQL 5.7+:用
->>运算符直接提取数组中第一个元素的productId,语句如下:
也可以用SELECT col1, col2->>'$[0].productId' AS ProductId FROM your_table;JSON_UNQUOTE(JSON_EXTRACT(col2, '$[0].productId'))来实现,效果完全一致。 - PostgreSQL:先把JSON数组展开,再提取目标字段:
SELECT col1, (jsonb_array_elements(col2::jsonb)).productId AS ProductId FROM your_table;
2. Python(Pandas)处理
如果是用Python做数据处理,用Pandas的话可以这样操作:
import pandas as pd import json # 模拟你的数据集 df = pd.DataFrame({ 'col1': ['Adam Smith'], 'col2': ['[{"productId":"328608","invoiceId":"16150101","productType":"car"}]'] }) # 解析JSON字符串并提取第一个元素的productId df['ProductId'] = df['col2'].apply(lambda x: json.loads(x)[0]['productId']) # 只保留需要的列 result_df = df[['col1', 'ProductId']] print(result_df)
3. JavaScript/Node.js处理
如果是前端或者Node.js环境,直接解析JSON后提取即可:
// 模拟数据 const rawData = { col1: 'Adam Smith', col2: '[{"productId":"328608","invoiceId":"16150101","productType":"car"}]' }; // 解析JSON数组并提取目标字段 const parsedArray = JSON.parse(rawData.col2); const result = { col1: rawData.col1, ProductId: parsedArray[0].productId }; console.log(result);
内容的提问来源于stack exchange,提问作者agustin85
相关产品推荐
相关产品推荐

