- Subscribe to RSS Feed
- Mark Question as New
- Mark Question as Read
- Float this Question for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page
How do I use Column Names of table in CASE Statement to assign Values and create another column in QUERY
Created on
12-29-2021
04:21 PM
- last edited on
12-30-2021
08:23 AM
by
christopher
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
I did enough google before coming to this forum. I have table Employee with following column Names (there are 40 columns)
Employee_ID, Employee_Type, Employee_Tenure
I want to use these column names in CASE Statement as part of HIVE Query to assign value.
E.g.
Case when Column Name = 'Employee_Type' then 1 else 0
when Column Name = 'Employee_Tenure' then 2 else 0
end as Rank
I know I can "show columns in Employee" to get all column names. But I don't know how to refer output of this query in CASE statement
I also try to save results of Query into variable ( I could be wrong doing this )
set hivevar:col_names=(show columns in employee)
select '${hivevar:col_names}'
but I get below error : Error while processing statement: Variable substitution depth is deeper than 40 for expression
Any help appreciated. If my question is too naive or stupid - I apologize.
Created 02-18-2022 01:16 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
let table hwctest has 2 columns as below,
+--------------------------+------------+----------+
| col_name | data_type | comment |
+--------------------------+------------+----------+
| col1 | string | |
| col2 | string | |
| dt | date | |
| | NULL | NULL |
| # Partition Information | NULL | NULL |
| # col_name | data_type | comment |
| dt | date | |
+--------------------------+------------+----------+
getting column name from metadata and stored in temp var,
beeline -u "jdbcurl" --showHeader=false --outputformat=csv2 -e "SELECT COLUMN_NAME FROM sys.COLUMNS_V2 c JOIN sys.TBLS a ON c.CD_ID=a.TBL_ID where a.TBL_NAME='hwctest'" | tr "\n" "," > tmp
a=$(cat tmp)
Passing col names as variable,
beeline -u "jdbcurl" --hivevar colName=${a%?}
.....
0: jdbc:hive2://c2757-node3.coelab.cloudera.c> select case when array_contains(split('${colName}',','),'col1') then 1 else 0
. . . . . . . . . . . . . . . . . . . . . . .> end as type
.....
INFO : Executing command(queryId=hive_20220218082727_46d036f4-7667-485a-a2c9-c5be158292d4): select case when array_contains(split('col1,col2',','),'col1') then 1 else 0
end as type
+-------+
| type |
+-------+
| 1 |
+-------+
replace the value col1 in your case.
