我想将包含文本格式的现有表更改为orc格式。我可以这样做:(1)手动创建一个orc格式的表,包含分区,然后(2)使用insert overwrite语句填充该表。
我正在尝试使用CTA(创建表。。。作为选择…)语句。有没有什么方法可以将动态分区包含在ctas语句中?所以,如果我的文本数据集有多个分区(例如:年和月),我可以直接在ctas语句中指出它吗?
格式可能如下:
CREATE TABLE TEST_TABLE
STORED AS ORC
WITH PARTITION(year, month)
LOCATION '/<my_location>'
tblproperties ("orc.compress"="SNAPPY")
AS SELECT * FROM <existing_table>;
有什么想法吗?
注意:我对ctas语句感兴趣的原因是:使用这个语句,我实际上不需要指出每个列的名称。但是,如果我创建一个基于orc的表,然后手动填充它,那么在创建表时必须指示所有列。这没关系;但是,如果我现有的表包含很多列,这不是一个好主意。
3条答案
按热度按时间h22fl7wq1#
其他答案都是正确的:你可以做
CREATE TABLE dest LIKE src;
如果您有一个完全符合您需要的表,但是您当前无法执行真正的动态cta来从变量字段创建分区表。此功能已添加到即将推出的spark 3.0中:https://issues.apache.org/jira/browse/spark-26435
ie3xauqp2#
不支持
失败:semanticexception[错误10068]:
create table as select不支持在目标表中进行分区
9rygscc13#
两个步骤:
其余存储为orc,您可以根据方便添加位置并通过配置单元查询支持。
对于外部表,这些步骤不起作用。问题是,数据在hdfs上的指定目录中更新,但当我们选择表时,我们看不到表中反映的更改。为此,您可以执行以下步骤:
解决方案1:检查表元数据是否更新。
解决方案2:如果解决方案1不起作用,则:
把table修好
然后可以删除源表并重命名
another_table
至source_table_name
.