我有一些记录,其中每一行都属于某些类别(数据类型-字符串数组)和唯一类别的单独列表(数据类型-字符串)。我需要将每一行与唯一列表匹配,并为其创建标志。
Input:
------
ID Category
1 ["Physics","Math"]
2 ["Math"]
3 ["Math,"Chemistry"]
4 ["Physics","Computer"]
现在我在本地的excel中有单独的类别唯一列表,如下所示:
Unique Category
["Physics"]
["Math"]
["Chemistry"]
["Computer"]
最终输出应如下所示:
ID Category Math_F Physics_F Computer_F Chemistry_F
1 ["Physics","Math"] 1 1 0 0
2 ["Math"] 1 0 0 0
3 ["Math,"Chemistry"] 1 0 0 1
4 ["Physics","Computer"] 0 1 1 0
有人可以帮忙查询,步骤和解释。我是Hive的新手。
使用array_contains()
:
SELECT ID,
Category,
CASE
WHEN array_contains(Category, 'Math') THEN 1
ELSE 0
END Math_F,
CASE
WHEN array_contains(Category, 'Physics') THEN 1
ELSE 0
END Physics_F,
CASE
WHEN array_contains(Category, 'Computer') THEN 1
ELSE 0
END Computer_F,
CASE
WHEN array_contains(Category, 'Chemistry') THEN 1
ELSE 0
END Chemistry_F
FROM TABLE t;
而且,如果您希望使用唯一类别的数组动态构建列,请使用其他一些工具来构建查询。例如,可以使用shell脚本来完成。
请参见此基于预定义数组构建SQL的示例。您可以轻松地从文件中添加数组读数:
#!/bin/bash
#define array
array=( Physics Math Computer Chemistry )
#initial sql
sql="select ID,
Category,"
#get length of array
arraylength=${#array[@]}
#get first flag column
columns="CASE
WHEN array_contains(Category,'${array[0]}') THEN 1
ELSE 0
END ${array[0]}_F"
#attach all other flags:
for (( i=1; i<=$(( $arraylength-1 )); i++ ))
do
columns="$columns,
CASE
WHEN array_contains(Category,'${array[$i]}') THEN 1
ELSE 0
END ${array[$i]}_F"
done
#final SQL
sql="$sql
$columns
from table t;
"
#print result
echo "$sql"
结果:
SELECT ID,
Category,
CASE
WHEN array_contains(Category, 'Physics') THEN 1
ELSE 0
END Physics_F,
CASE
WHEN array_contains(Category, 'Math') THEN 1
ELSE 0
END Math_F,
CASE
WHEN array_contains(Category, 'Computer') THEN 1
ELSE 0
END Computer_F,
CASE
WHEN array_contains(Category, 'Chemistry') THEN 1
ELSE 0
END Chemistry_F
FROM TABLE t;
您可以将Hive调用添加到上述脚本中:hive -e "$sql"
执行该脚本,或将其保存到文件中。
问题内容: 假设我在SQL中有数百万行,使用PostgreSQL进行查询。每行是否包含字符串。在所有行中,我需要获取包含CONTAINS的行。 那么最好的查询方式是什么? 我尝试了以下操作,但是速度非常慢。 我应该使用什么? 问题答案: 您需要找出一种方法来建立索引或使用其他类似搜索引擎的方法。 首先看一下为什么LIKE在postgresl中会变慢,以及如何使我在use-the-index-luk
当我运行以下配置单元命令时 hive-e‘选择msg,将(*)从表中计数为cnt,其中像“%abcd%”这样的msg按msg排序按cnt desc;’sed的/[\t]/,/g'>table.csv 失败:ParseException第1:89行无法识别表达式规范中“like”“%”“password”附近的输入 我知道在指定字符串“%abcd%”时有问题。该命令在配置单元环境中工作正常,但这里我
我有一个字符串数组,我想查找具有字段且值包含在数组中的所有文档。 例如,假设我有数组< code>kidsInTrouble = ["Jerry "," Tom "," Arnold"], 我想搜索我的学生集合,以找到< code>name字段为< code>"Jerry" 、< code>"Tom"或< code>"Arnold"的所有孩子。 (如果可以使用Spring的Mongo驱动程序方法提
问题内容: 通常,在使用SELECT查询数据库时,通常希望查找与给定搜索字符串匹配的记录。 例如: 该查询应为我提供所有记录,其中“ Bob Smith”出现在名称字段中的任何位置。 我想做的是相反的。 我想查找名称字段在“ Robert Bob Smith III,PhD。”(查询的字符串参数)中的所有记录,而不是查找在名称字段中具有“ Bob Smith”的所有记录。 问题答案: 只是转一下喜
问题内容: 我认为我遇到了一个听起来比实际容易的问题……我不太确定。我想定义一个正则表达式,并且要构建一些与之匹配的字符串。 我可以导入具有该功能的任何模块吗?最好不要使用或暴力破解方法。必须有一种更优雅的方法来做到这一点。 问题答案: 我一直在研究一个小的帮助程序库,用于使用Python生成随机字符串 它包含一个方法,该方法允许您从正则表达式创建字符串: 目前,它适用于大多数基本正则表达式。
反正有这样做的吗?