我正在尝试提取示例数据,但需要屏蔽/散列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`;
而不是列出此表中的每一列(我都需要它们),有没有解决的办法?
老实说,我的建议是只明确说明您需要的列。但是,如果您绝对要使用*,则实际上只有一种解决方法。两者都要求您按照查询中的指定创建表,但使用非重复的列名作为userid哈希除外,如下例所示。
CREATE TABLE user.temp_userdata_hashed AS
SELECT *, md5(concat(userid, 'useridGUI')) as useridhash
FROM medicaldata
一旦创建了临时表,您就可以使用ALTER TABLE命令删除原始的userid列,然后将useridhash重命名为userid。然后,当您使用SELECT查询临时表时,可以继续使用*。