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

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

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

  1. CREATE EXTERNAL TABLE URL(url STRING, clicks INT)
  2. COMMENT 'Unique Clicks per URL'
  3. PARTITIONED BY(dt STRING)
  4. ROW FORMAT DELIMITED
  5. FIELDS TERMINATED BY '\t'
  6. LINES TERMINATED BY '\n'
  7. STORED AS TEXTFILE
  8. LOCATION '/mypath/URL';
  9. LOAD DATA INPATH '/inputpath/' INTO TABLE URL
  10. PARTITION (dt=date_format(CURRENT_TIMESTAMP, "yyyy.MM.dd HH:mm:ss"));

我遇到以下错误:

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

我试过用

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

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

wkftcu5l

wkftcu5l1#

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

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

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

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

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

  1. set hive.exec.dynamic.partition.mode=nonstrict;
  2. insert into URL select *,current_date from URL_STG;

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

  1. hive --hivevar dt=$(date +"%Y-%m-%d") -e \
  2. 'LOAD DATA INPATH '\''/inputpath/'\'' INTO TABLE URL PARTITION (dt=date '\''${hivevar:dt}'\'')'
展开查看全部

相关问题