我正在尝试提取示例数据,但是需要屏蔽/散列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`;
除了列出该表中的每一列(我都需要它们)之外,还有没有办法解决此问题?
答案 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查询临时表时,可以继续使用*。