散列用户ID并创建临时表

时间:2019-11-13 16:52:56

标签: sql apache-zeppelin

我正在尝试提取示例数据,但是需要屏蔽/散列userid。我需要先构建一个临时表,因为我正在Zeppelin中工作并且输出被截断,所以我正在构建一个临时表,以便可以从第3方工具(Razor SQL)查询数据。

这就是我用来屏蔽/散列userid的内容:

CREATE TABLE user.temp_userdata_hashed AS
SELECT *, md5(concat(userid, 'useridGUI')) as userid
FROM medicaldata

这在没有CREATE TABLE的情况下有效,但是当我包含CREATE TABLE时出现此错误:

org.apache.spark.sql.AnalysisException: Found duplicate column(s) in the table definition of `user`.`temp_userdata_hashed`: `userid`;

除了列出该表中的每一列(我都需要它们)之外,还有没有办法解决此问题?

1 个答案:

答案 0 :(得分:1)

说实话,我的建议是只明确声明您需要的列。但是,如果您绝对要使用*,则实际上只有一种解决方法。两者都要求您按照查询中的指定创建表,除了使用非重复的列名作为userid哈希值外,如下例所示。

CREATE TABLE user.temp_userdata_hashed AS
SELECT *, md5(concat(userid, 'useridGUI')) as useridhash
FROM medicaldata

一旦创建了临时表,就可以使用ALTER TABLE命令删除原始的userid列,然后将useridhash重命名为userid。然后,当您使用SELECT查询临时表时,可以继续使用*。