首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于列数据类型的星火SQL条件选择列

基于列数据类型的星火SQL条件选择列
EN

Stack Overflow用户
提问于 2020-12-26 12:43:15
回答 1查看 171关注 0票数 0

我有一个列,它有时是一个字符串,有时是一个带有单个元素的字符串数组。不幸的是,我没有办法改变这种行为,所以它总是只有一种数据类型。

当列是数组时,我需要选择它的第一个元素,当它包含一个字符串时,我需要选择另一个列。

当我这么做时:

代码语言:javascript
复制
SELECT IFNULL(`myColumn`[0],`myOtherColumn`) FROM myTable

如果myColumn是一个字符串,它将抛出:

org.apache.spark.sql.AnalysisException:无法从myColumn#691中提取值:需要结构类型但得到字符串

我签出了方法,但是afaik只适用于来自java库的静态方法,所以我不能使用isArray或其他实例方法。

是否有一种方法可以根据列数据类型有条件地选择列?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-26 13:46:27

我想不出在什么时候将列类型检查放到一个案例中,但是这里有一个可以工作的黑客:

代码语言:javascript
复制
select
    case when (substring(cast(myColumn as string), 1, 1) = '[') and 
              (substring(cast(myColumn as string), -1, 1) = ']')
         then split(trim(both '[]' from cast(myColumn as string)), ',')[0]
         else myOtherColumn
         end
from myTable;

当然,如果字符串以[开头或以]结尾,这可能会失败。如果您可以使用pyspark/scala,您可以通过检查列类型以一种更可靠的方式来做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65456506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档