分区列等于 Hive 中的当前日期
Partition column equal to current date in Hive
我正在尝试使用分区将数据加载到 Hive table。
代码如下:
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;
但没有任何改变。
为什么不起作用?
如何将当前日期设置为分区列?
提前谢谢你。
洛伦佐
当您可以在文件之上创建外部 table 时,为什么要移动这些文件?
LOAD DATA INPATH
只是将文件(HDFS 元数据操作)"as is" 移动到 table 的位置。
分区列明明是日期,为什么要定义成字符串?
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.
创建一个额外的 table、URL_STG
,类似于 URL
但没有分区,并使用它来动态插入分区。
set hive.exec.dynamic.partition.mode=nonstrict;
insert into URL select *,current_date from URL_STG;
3.
从 CLI 提供日期作为变量
hive --hivevar dt=$(date +"%Y-%m-%d") -e \
'LOAD DATA INPATH '\''/inputpath/'\'' INTO TABLE URL PARTITION (dt=date '\''${hivevar:dt}'\'')'
我正在尝试使用分区将数据加载到 Hive table。
代码如下:
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;
但没有任何改变。
为什么不起作用? 如何将当前日期设置为分区列?
提前谢谢你。
洛伦佐
当您可以在文件之上创建外部 table 时,为什么要移动这些文件?
LOAD DATA INPATH
只是将文件(HDFS 元数据操作)"as is" 移动到 table 的位置。
分区列明明是日期,为什么要定义成字符串?
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.
创建一个额外的 table、URL_STG
,类似于 URL
但没有分区,并使用它来动态插入分区。
set hive.exec.dynamic.partition.mode=nonstrict;
insert into URL select *,current_date from URL_STG;
3.
从 CLI 提供日期作为变量
hive --hivevar dt=$(date +"%Y-%m-%d") -e \
'LOAD DATA INPATH '\''/inputpath/'\'' INTO TABLE URL PARTITION (dt=date '\''${hivevar:dt}'\'')'