Sql 是否在配置单元中创建列与另一个表相同的表?
我想从配置单元中另一个表的某些元数据创建表。我在用蜂箱 我从问题中了解到,可以通过sql中的信息_SCHEMA.COLUMNS从表中检索metatdata: 配置单元是否具有类似的表元数据访问权限,以允许我使用另一个表的列创建表?本质上,我是在复制一个没有所有元组的表 这是迄今为止我拥有的最好的东西: 创建表从信息_SCHEMA.COLUMNS中选择行格式由“|”分隔的字段 您可以尝试CTAS语法: 您可以像这样使用新表来获取结构而不是数据Sql 是否在配置单元中创建列与另一个表相同的表?,sql,hadoop,hive,Sql,Hadoop,Hive,我想从配置单元中另一个表的某些元数据创建表。我在用蜂箱 我从问题中了解到,可以通过sql中的信息_SCHEMA.COLUMNS从表中检索metatdata: 配置单元是否具有类似的表元数据访问权限,以允许我使用另一个表的列创建表?本质上,我是在复制一个没有所有元组的表 这是迄今为止我拥有的最好的东西: 创建表从信息_SCHEMA.COLUMNS中选择行格式由“|”分隔的字段 您可以尝试CTAS语法: 您可以像这样使用新表来获取结构而不是数据 我相信这会奏效: DROP TABLE IF EXIS
我相信这会奏效:
DROP TABLE IF EXISTS schema.New_Table;
CREATE TABLE New_Table
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\034' LINES TERMINATED BY '\012'
STORED AS TEXTFILE location '/IC/New_Table'
AS
select *
from Old_Table;
“\034”是做什么的?它指定了分隔符。”\034'是'\x1c'的serde代码,我相信。我想如果你把那部分去掉,它就会默认为默认的熟食。如果不想引入任何数据,请添加where 1=2。运行以下命令以查看旧的_表使用了什么。显示创建表格旧表格。这将显示旧表用作分隔符的内容,您也可以对新表使用这些分隔符。此外,为了防止遍历每条记录,请执行以下操作:选择*from old_table limit 1;但对于大数据来说,这要慢一些,对吗?它仍然必须在每一行中运行。@因此,请看1=2的位置。它总是错误的,所以得到的是空表,但我认为sql不会这样计算它。我想它仍然会检查每一行。@那么你试过了吗?查询优化器聪明的地方在于它不应该遍历所有行。检查一下执行情况plan@Sother演示给你们看执行计划:不可能在哪里,开始相信:很好!我不知道这个存在。这应该是正确的答案。它要简洁得多。
CREATE TABLE yourtable
LIKE table2;
DROP TABLE IF EXISTS schema.New_Table;
CREATE TABLE New_Table
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\034' LINES TERMINATED BY '\012'
STORED AS TEXTFILE location '/IC/New_Table'
AS
select *
from Old_Table;