分区列等于配置单元中的当前日期

eqfvzcg8  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(502)

我正在尝试使用分区将数据加载到配置单元表中。
代码如下:

CREATE EXTERNAL TABLE URL(url STRING, clicks INT)
COMMENT 'Unique Clicks per URL'
PARTITIONED BY(dt STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/mypath/URL';

LOAD DATA INPATH '/inputpath/' INTO TABLE URL
PARTITION (dt=date_format(CURRENT_TIMESTAMP, "yyyy.MM.dd HH:mm:ss"));

我遇到以下错误:

FAILED: ParseException line 4:14 cannot recognize input near 
'date_format' '(' 'CURRENT_TIMESTAMP' in constant

我试过用

SET hive.exec.dynamic.partition.mode=nonstrict;

但一切都没变。
为什么不起作用?如何将当前日期设置为分区列?
先谢谢你。
洛伦佐

wkftcu5l

wkftcu5l1#

既然可以在文件上创建外部表,为什么还要移动这些文件? LOAD DATA INPATH 只需将文件(hdfs元数据操作)“按原样”移动到表的位置。
为什么要将分区列定义为一个字符串,而它显然是一个日期?

CREATE EXTERNAL TABLE URL ... PARTITIONED BY(dt DATE) ...

为什么要尝试使用非iso格式(yyyy.mm.dd)?
iso日期格式为yyyy mm dd
由于分区信息似乎不是数据的一部分,因此有3个选项:
1
使用常量(不允许表达式,包括函数),例如。

LOAD DATA INPATH '/inputpath/' INTO TABLE URL PARTITION (dt=date '2017-03-04');

2
创建一个附加表, URL_STG ,类似于 URL 但是没有分区,并使用它来动态插入分区。

set hive.exec.dynamic.partition.mode=nonstrict;

insert into URL select *,current_date from URL_STG;

三。
将日期作为cli中的变量提供

hive --hivevar dt=$(date +"%Y-%m-%d") -e \
'LOAD DATA INPATH '\''/inputpath/'\'' INTO TABLE URL PARTITION (dt=date '\''${hivevar:dt}'\'')'

相关问题