首页 > 解决方案 > 散列用户 ID 并创建临时表

问题描述

我正在尝试提取样本数据,但需要屏蔽/散列userid。我需要先构建一个临时表,因为我在 Zeppelin 中工作并且输出被截断,所以我正在构建一个临时表,以便可以从 3rd 方工具(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`;

与其列出此表中的每一列(我都需要它们),有没有办法解决这个问题?

标签: sqlapache-zeppelin

解决方案


老实说,我的建议是明确说明您需要的列。但是,如果您绝对想使用 *,实际上只有一种解决方法。两者都让您按照查询中指定的方式创建表,但用户 ID 哈希使用不重复的列名除外,如下例所示。

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

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


推荐阅读