【发布时间】:2017-12-18 01:06:54
【问题描述】:
我目前正在尝试使用 CREATE Table AS SELECT 语句创建一个表。在 SELECT 语句中,当前有许多表(超过 10 个)的连接。
CREATE TABLE table_name AS
SELECT
*
FROM
table_x x
LEFT JOIN
table_y y
on x.id=y.fid
LEFT JOIN
table_z z
on x.id=z.fid
...
...
...
由于许多表共享列名(尽管不是数据),我收到了重复列名错误。
我想知道是否有一种懒惰的方式来生成列名,所以没有冲突。例如在上面的示例中,table_y 和 table_z 都有名为 fid 的列。
我想知道是否有一种方法可以在新表中生成名为 y.id 和 z.id 的列,或类似的名称(例如 y_id、z_id),而不仅仅是 id 和 id ?
我想避免编写一个查询,其中我必须明确写出选择中的所有列,我们使用AS 语句如下:
CREATE TABLE table_name AS
SELECT
x.id as x_id,
y.fid as y_fid,
z.fid as z_fid,
...
...
...
FROM
table_x x
LEFT JOIN
table_y y
on x.id=y.fid
LEFT JOIN
table_z z
on x.id=z.fid
...
...
...
【问题讨论】:
-
最好的做法是写出列名,因为这样可以保护您在底层表结构发生变化时避免其他查询、函数和过程中断,并使脚本更易于维护 - 如果新开发人员有为了进行一些更改,如果脚本中已说明,他们更有机会知道要引入的内容。您甚至可能会发现新表中有一些您不需要的列,因此您不需要选择它们
-
这个练习的一部分是对记录在多个表上的数据进行健全性检查,因此我们可以为每列加上每个表的标识符作为前缀。我完全理解我将在用于连接的列之间有重复的值,但是,这不会在生产环境中使用,并且对于这个用例来说,重复的内容并不是一个大问题。
标签: sql hive create-table