我正在尝试从impala中现有的kudu表创建一个带有分区的parquet表,而不必再次使用数据类型重新指定列。
CREATE TABLE IF NOT EXISTS db_name.parquet_table
PARTITIONED BY (`year` SMALLINT, `month` TINYINT, `day` TINYINT)
STORED AS PARQUET
As SELECT * FROM db_name.kudu_table limit 0
我收到一条错误消息说
ParseException: Syntax error in line 4:undefined: As SELECT * FROM db_name.parquet_table limit 0 ^ Encountered: AS Expected CAUSED BY: Exception: Syntax error
但是,当我尝试创建没有分区的Parquet地板表时,它可以使用:
CREATE TABLE IF NOT EXISTS db_name.parquet_table STORED AS PARQUET
AS SELECT * FROM db_name.kudu_table LIMIT 0
但当我尝试使用以下方法添加分区时:
ALTER TABLE db_name.parquet_table ADD PARTITION(`year`=0,`month`=0,`day`=0)
我收到以下错误消息:
AnalysisException: Table is not partitioned: db_name.parquet_table
1条答案
按热度按时间wvmv3b1j1#
你可以试着用
静态分区
将数据加载到分区表的一种方法是使用静态分区,即手动定义不同的分区(另一种方法是在加载数据时自动定义分区,这称为动态分区。)
对于静态分区,您可以使用
ALTER TABLE … ADD PARTITION
语句,然后将数据加载到分区中。以你为例,我想试试这个。
第一。创建分区表
第二。
ALTER TABLE
语句来创建分区。注意分区列名和定义这个分区的特定值是如何在
ADD PARTITION
条款。这将在表目录中创建分区目录。创建分区后,可以使用
INSERT … SELECT
陈述对于静态分区,您需要为每个分区重复这两个步骤:首先创建分区,然后添加数据。实际上,您可以使用任何方法来加载数据;你不需要使用
INSERT
声明。你可以用hdfs dfs
命令或LOAD DATA INPATH
命令。但是,无论如何加载数据,都必须小心确保数据存储在正确的分区子目录中。