Hadoop含Lateral view explode的查询在SAS直通模式下解析异常求助
SAS直通Hadoop执行含Lateral View Explode的Hive查询时解析异常问题
- 现有一段使用
Lateral view outer explode的Hadoop查询,直接在Hadoop环境运行正常,但通过SAS直通模式执行时触发解析异常,无法确定正确的使用方式。
具体SAS代码
Proc sql; Connect to hadoop( Host=.. Schema.. Uri=.. Scratch_db= Subchar=); Create table app as Select * From connection to hadoop( With jsonextr as( Select Get_json_object(xml,'$.app.id')as id, Get_json_object(xml,'$.app.apply[].product')as products From tab1) Select Id, Get_json_object(product_data,'$.code') as Code From jsonextr Lateral view outer explode(split(products,';')) p as product_data; ); Disconnect From hadoop; Quit;
可能的解决方向
- 改写CTE为子查询:SAS直通模式对Hive CTE(With子句)与
Lateral view的组合解析可能存在兼容性问题,将CTE替换为子查询可规避该问题,示例代码如下:Proc sql; Connect to hadoop( Host=.. Schema.. Uri=.. Scratch_db= Subchar=); Create table app as Select * From connection to hadoop( Select Id, Get_json_object(product_data,'$.code') as Code From ( Select Get_json_object(xml,'$.app.id')as id, Get_json_object(xml,'$.app.apply[].product')as products From tab1 ) jsonextr Lateral view outer explode(split(products,';')) p as product_data; ); Disconnect From hadoop; Quit; - 检查驱动兼容性:确认SAS/ACCESS to Hadoop驱动版本与目标Hive版本匹配,部分旧版本驱动可能不支持
Lateral view outer explode的完整语法,尝试升级驱动至兼容版本。 - 调整语法细节:SAS直通模式对特殊字符或语法格式敏感,可尝试转义分号(如
split(products,'\;')),或调整引号类型(将单引号改为双引号)测试。 - 验证JSON路径:检查
Get_json_object(xml,'$.app.apply[].product')的路径是否符合Hive JSON解析规则,部分环境中数组遍历的[]语法可能需要调整为Lateral view json_tuple或其他方式处理数组。
内容的提问来源于stack exchange,提问作者Richa Mukherjee
相关产品推荐
相关产品推荐

