Mysql 配置单元表未填充来自临时表的数据
我有一个问题,我希望有人能帮助我,我相信这是由于我的桌子是如何被分割的,但我正在努力想出一个解决办法 我创建了一个表,如下面的示例Mysql 配置单元表未填充来自临时表的数据,mysql,sql,csv,hadoop,hive,Mysql,Sql,Csv,Hadoop,Hive,我有一个问题,我希望有人能帮助我,我相信这是由于我的桌子是如何被分割的,但我正在努力想出一个解决办法 我创建了一个表,如下面的示例 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 v
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_DATE中的值应为YYYYMMDD格式的日期格式,该格式源自字段时间,其中所有值均设置为2015-06-20T00:00:00,但我不确定TRAN_DATE应如何获得该值。${day}的值为20150620。我试着使用下面的测试来查看出现的数据,但没有成功
insert overwrite table Demo partition (to_char(time,YYYY-MM-DD) = ${day}) SELECT * FROM Demo_staging;
我可以看到数据已经出现在我的staging表中,但它并没有到达实际的表中,我只能认为分区是原因
非常感谢您的帮助
谢谢您是否尝试过在不使用分区的情况下从暂存到实际表的干净加载,这是否如预期的那样工作?还不确定
to_char
是否有效,您可能需要尝试类似date\u格式(time,'yyyyy-MM-dd')='${day}'
。。可能需要稍微处理一下格式。不,不幸的是,即使没有分区,数据仍然无法从暂存表中读取。您是否也尝试了我前面评论中提到的date\u format
函数?您对此有什么结果吗?我将分区数据类型更改为int,希望这不再是一个问题