我有一个问题,我希望有人能帮助我,我相信这是由于我的表是如何被分割,但我正在努力想出一个解决办法。
我创建了一个表,例如下面的示例
CREATE TABLE Demo
(time timestamp COMMENT 'timestamp in format yyyymmddTss:mm:hh',
exampleId varchar(6) COMMENT 'example field'
example2 varchar(10) COMMENT 'example field'
example3 varchar(50) COMMENT 'example field'
example4 varchar(50) COMMENT 'example field'
)
COMMENT 'A table to demonstrate my problem'
PARTITIONED BY (TRAN_DATE DATE COMMENT 'Transaction Date')
CLUSTERED BY (exampleId)
SORTED BY (exampleId) INTO 24 BUCKETS
stored as orc;
然后,我尝试使用如下所示的外部表将数据从csv文件复制到一个表中
Drop TABLE Demo_staging
CREATE TABLE Demo_staging
(time timestamp COMMENT 'timestamp in format yyyymmddTss:mm:hh',
exampleId varchar(6) COMMENT 'example field'
example2 varchar(10) COMMENT 'example field'
example3 varchar(50) COMMENT 'example field'
example4 varchar(50) COMMENT 'example field'
)
COMMENT 'The staging table to demonstrate my problem'
row format delimited fields terminated by ',' null defined as '\001'
STORED AS TEXTFILE
LOCATION '${appPath}/raw'
tblproperties ("skip.header.line.count"="1", "skip.footer.line.count"="2");
insert overwrite table Demo partition (TRAN_DATE = ${day}) SELECT * FROM Demo_staging;
tran\u date中的值应该是yyyymmdd格式的日期格式,该格式派生自字段time,其中所有值都设置为2015-06-20t00:00:00,但我不确定tran\u date应该如何获得该值。${day}的值是20150620。我试着使用下面的测试来查看数据的出现,但是没有成功
insert overwrite table Demo partition (to_char(time,YYYY-MM-DD) = ${day}) SELECT * FROM Demo_staging;
我可以看到数据已经出现在我的staging表中,但它并没有到达实际的表,我只能认为分区是造成这种情况的原因。
非常感谢您的帮助。
谢谢
暂无答案!
目前还没有任何答案,快来回答吧!